2011-02-22 70 views
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列) – 2011-02-22 17:06:28

+1

似乎`combn(20,3)`在這裏可能會用於生成所有列的唯一組合。如何把它變成引用`apply`或`for loop`中的每一列的東西,都超出了我的想象。 – Chase 2011-02-22 17:23:15

回答

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