2017-01-22 10 views
-1

I haben folgende Daten:Kombinationen von Spalten und Produkt in 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)) 

Ich brauche alle möglichen Kombinationen der Werte der Spalten A, B und C zu erzeugen, und ihre Werte multiplizieren. Das heißt,

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

Außerdem einmal habe ich die Kombinationen multipliziert, ich habe die Produkte hinzuzufügen, entsprechend der variablen Id (und ihre Summe). Zum Beispiel, wenn ich die Kombination 1 (A) * 5 (B) * 10 (C) multipliziert habe, entspricht das Produkt den Ids: 0 (A), 0 (B), 1 (C), mit Summe = 1 Dieses Produkt sollte zu Produkt 1 (A) * 6 (B) * 9 (C) hinzugefügt werden, das den Ids entspricht: 0 (A), 1 (B), 0 (C), mit Summe = 1. Wie Könntest du es effizient machen? Die Anzahl der möglichen Kombinationen könnte sehr hoch sein.

Mit freundlichen Grüßen

Majesus

Antwort

0

Versuchen Sie folgendes:

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 
Verwandte Themen