2017-01-22 37 views
-1

產物I有如下的數據:組合的字段,並且作爲R

data.frame(Id=c(0,1,2,3),A=c(1,2,3,4),B=c(5,6,7,8),C=c(9,10,11,NA)) 

我需要生成列A,B和C的值的所有可能的組合,以及它們的相乘值。也就是說,

1*5*9 
1*5*10 
1*5*11 
... 
1*6*9 
1*6*10 
... 
3*4*11 

而且,一旦我成倍的組合,我已經根據變量ID(及其總和)來添加產品。例如,如果我將組合1(A)* 5(B)* 10(C)相乘,則產品對應於Ids:0(A),0(B),1(C),其中sum = 1 (A)* 6(B)* 9(C),對應於Ids:0(A),1(B),0(C),總和= 1。你能有效地做到嗎?可能的組合數量可能非常高。

親切的問候,

Majesus

回答

0

試試這個:

df.grid = cbind(expand.grid(df[,rep(1,3)]), prod=apply(expand.grid(df[,2:4]), 1, prod)) 

> aggregate(prod ~ I(Id + Id.1 + Id.2), df.grid, sum) 
# I(Id + Id.1 + Id.2) prod 
# 1     0 45 
# 2     1 194 
# 3     2 521 
# 4     3 1056 
# 5     4 1523 
# 6     5 1738 
# 7     6 1479 
# 8     7 892 
# 9     8 352