我有以下数据:
1*5*9
1*5*10
1*5*11
...
1*6*9
1*6*10
...
3*4*11
我需要生成列A,B和C的值的所有可能组合,并将它们的值相乘。也就是说,
{{1}}
此外,一旦我将这些组合相乘,我就必须根据变量Id(及其总和)添加产品。例如,如果我乘以组合1(A)* 5(B)* 10(C),则乘积对应于Ids:0(A),0(B),1(C),sum = 1 。此产品应添加到产品1(A)* 6(B)* 9(C)中,对应于Ids:0(A),1(B),0(C),其中sum = 1。你能有效地做到吗?可能的组合数量可能非常高。
亲切的问候,
Majesus
答案 0 :(得分: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