R 独特的列组合

R 独特的列组合,r,matrix,combinations,R,Matrix,Combinations,以下是我的简化数据集: foo <- data.frame(var1= c(1:10), var2=rep(1:5,2),var3=rep(1:2,5),var4=rep(3:7,2) ) 我需要得到3个变量的唯一组合及其每个周期的总和 类似 var1var2var3 var1var3var4 var1var5var18 etc... 1 6 sum 2 6 3 7 4

以下是我的简化数据集:

foo <- data.frame(var1= c(1:10), var2=rep(1:5,2),var3=rep(1:2,5),var4=rep(3:7,2) )    
我需要得到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与@Chase建议的var3var1var5相同,
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

nams您是针对任意数据集还是针对此特定数据集进行求解?这个可能有优化。此外,您的第一个解决方案数据点似乎应该是3,而不是6(第1行,第一列)。似乎
combn(20,3)
在这里可以用于生成所有列的唯一组合。如何将其转化为引用
apply
for loop
中的每一列,我有点不懂。太好了,这正是我想要的。Thanks@Alex,尝试接受此答案作为正确答案(通过单击投票分数下的复选标记)。
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