2017-01-22 4 views
-1

У меня есть следующие данные:комбинации столбцов, и произведение в 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)) 

мне нужно генерировать все возможные комбинации значений столбцов А, В и С, и умножить их значения. То есть,

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), произведение соответствует идентификаторам: 0 (A), 0 (B), 1 (C), с суммой = 1 Этот продукт следует добавить к продукту 1 (A) * 6 (B) * 9 (C), который соответствует идентификаторам: 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 
Смежные вопросы