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