[英]How to create histograms for each unique combination of levels from two factors?
[英]Create a combination of unique column names from two dataset without looping
我有两个向量:
a <- c(1,2,3)
b <- c(11,12,13)
我想创建列名称(3 * 3 = 9)的组合,以便它们使用来自两个名称的值:
paper1grid11
paper1grid12
paper1grid13
paper2grid11
paper2grid12
paper2grid13
paper3grid11
paper3grid12
paper3grid13
我试过使用paste0命令,但没有组合。 而是只创建3个列名。
paste0("paper", a,"grid", b)
我不想使用for循环
您可以使用expand.grid
进行此expand.grid
。
a <- c(1,2,3)
b <- c(11,12,13)
do.call(paste0, expand.grid("paper", a, "grid", b))
您可以使用outer
,即
outer(a, b, function(x, y) paste0('paper', x, 'grid', y))
# [,1] [,2] [,3]
#[1,] "paper1grid11" "paper1grid12" "paper1grid13"
#[2,] "paper2grid11" "paper2grid12" "paper2grid13"
#[3,] "paper3grid11" "paper3grid12" "paper3grid13"
或将其环绕在c
以获得答案,例如
c(outer(a, b, function(x, y) paste0('paper', x, 'grid', y)))
#[1] "paper1grid11" "paper2grid11" "paper3grid11" "paper1grid12" "paper2grid12" "paper3grid12" "paper1grid13" "paper2grid13" "paper3grid13"
这篇文章用data.table
标记,因此这是一个data.table
解决方案:
CJ(a, b)[, paste0("paper", a, "grid", b)]
# [1] "paper1grid11" "paper2grid11" "paper3grid11" "paper1grid12" "paper2grid12"
# [6] "paper3grid12" "paper1grid13" "paper2grid13" "paper3grid13
apply(expand.grid("paper", a, "grid", b), 1, paste, collapse="")
您可以使用crossing()
library(tidyverse)
crossing("paper",a,"grid",b)%>%unite(`"paper"`,a,`"grid"`,b, col = "col1",sep="")%>%pull(col1)
[1] "paper1grid11" "paper1grid12" "paper1grid13" "paper2grid11" "paper2grid12" "paper2grid13"
[7] "paper3grid11" "paper3grid12" "paper3grid13"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.