R: Beschleunigung der "Group by" -Operationen

Ich habe eine Simulation, die ein riesiges Aggregat hat und Schritt für Schritt in der Mitte kombiniert. Ich habe diesen Prozess mit der Funktion ddply () von plyr prototypisiert, die für einen großen Prozentsatz meiner Anforderungen hervorragend geeignet ist. Aber ich brauche diesen Aggregationsschritt, um schneller zu sein, da ich 10K-Simulationen ausführen muss. Ich skaliere die Simulationen bereits parallel, aber wenn dieser eine Schritt schneller wäre, könnte ich die Anzahl der benötigten Knoten erheblich verringern.

Hier ist eine sinnvolle Vereinfachung dessen, was ich versuche zu tun:

library(Hmisc)

# Set up some example data
year <-    sample(1970:2008, 1e6, rep=T)
state <-   sample(1:50, 1e6, rep=T)
group1 <-  sample(1:6, 1e6, rep=T)
group2 <-  sample(1:3, 1e6, rep=T)
myFact <-  rnorm(100, 15, 1e6)
weights <- rnorm(1e6)
myDF <- data.frame(year, state, group1, group2, myFact, weights)

# this is the step I want to make faster
system.time(aggregateDF <- ddply(myDF, c("year", "state", "group1", "group2"),
                     function(df) wtd.mean(df$myFact, weights=df$weights)
                                 )
           )

Alle Tipps oder Vorschläge sind willkommen!

Antworten auf die Frage(10)

Ihre Antwort auf die Frage