生成唯一的行组合,其中一行中的所有值都被视为单个元素

时间:2015-12-29 20:08:37

标签: r

尝试生成行的每个唯一组合,其中行中的所有值都被视为单个元素。例如:

  Var1  Var2  Var3 
1  a     b     a
2  b     a     c
3  c     c     b
4  d     d     d

创建组合的地方:

  Var1 Var2 Var3 Var4 Var5 Var6  
1  a    b    a    b    a    c
2  a    b    a    c    c    b
3  a    b    a    d    d    d
4  b    a    c    c    c    b
5  b    a    c    d    d    d
6  c    c    b    d    d    d

我正在使用do.call(rbind,Map(expand.grid,l1,l2)来使用Map,但每个变量都被视为一个单独的值,而我需要整个行组合。

1 个答案:

答案 0 :(得分:1)

combs <- combn(1:nrow(df1), 2)
do.call(rbind, Map(function(i,j) cbind(df1[i,],df1[j,]), combs[1,], combs[2,]))
# Var1 Var2 Var3 Var1 Var2 Var3
# 1     a    b    a    b    a    c
# 11    a    b    a    c    c    b
# 12    a    b    a    d    d    d
# 2     b    a    c    c    c    b
# 21    b    a    c    d    d    d
# 3     c    c    b    d    d    d

此方法首先创建可能项目的组合。每行代表您案例中的一个项目。因此,可以基于组合索引对data.frame进行子集化。 Mapdo.call(rbind, ..)有助于缩短语法,但重要的是cbind(df1[i,], df1[j,])