唯一列组合

3

这是我的简化数据集:

foo <- data.frame(var1= c(1:10), var2=rep(1:5,2),var3=rep(1:2,5),var4=rep(3:7,2) )    

一共有20个变量

foo

   var1 var2 var3   var4    ... var20
1     1    1    1      3
2     2    2    2      4
3     3    3    1      5
4     4    4    2      6
5     5    5    1      7
6     6    1    2      3
7     7    2    1      4
8     8    3    2      5
9     9    4    1      6
10   10    5    2      7

我需要根据每个时间段获取3个变量的唯一组合及其总和。

例如:

  var1var2var3   var1var3var4   var1var5var18  etc...
1     6               sum
2     6           
3     7          
4     10           
5     11           
6     9         
7     10             
8     13          
9     14          
10    17         

请注意,变量var1var3var5与var3var1var5相同。


1
你是在解决任意数据集还是这个特定的数据集?对于这个特定的数据集可能有优化。此外,你的第一个解决方案数据点似乎应该是3,而不是6(第1行,第1列)。 - Tom Cerul
1
似乎可以使用combn(20,3)来生成所有列的唯一组合,这在这里非常有用。如何将其转化为引用applyfor loop中每个列的内容则超出了我的能力范围。 - Chase
1个回答

7
如@Chase所建议的那样,combn可以帮助您获得想要的结果:
nams <- apply( combn(colnames(foo),3), 2, function(z) paste(z, collapse = ''))
cols <- combn( ncol(foo), 3)

tripleSums <- apply( cols, 2, function(z) rowSums(foo[,z]))
colnames(tripleSums) <- nams

> tripleSums
      var1var2var3 var1var2var4 var1var3var4 var2var3var4
 [1,]            3            5            5            5
 [2,]            6            8            8            8
 [3,]            7           11            9            9
 [4,]           10           14           12           12
 [5,]           11           17           13           13
 [6,]            9           10           11            6
 [7,]           10           13           12            7
 [8,]           13           16           15           10
 [9,]           14           19           16           11
[10,]           17           22           19           14

@Alex,请尝试接受此答案为正确答案(通过单击投票分数下方的复选标记)。 - Roman Luštrik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接