J'ai une simulation qui a un grand agrégat et une étape de combinaison au milieu. J'ai prototypé ce processus en utilisant la fonction ddply() de plyr qui fonctionne parfaitement pour un pourcentage énorme de mes besoins. Mais j'ai besoin que cette étape d'agrégation soit plus rapide puisque je dois faire des simulations 10K. Je suis déjà en train de mettre à l'échelle les simulations en parallèle, mais si cette étape était plus rapide, je pourrais grandement diminuer le nombre de nœuds dont j'ai besoin.R: accélérer les opérations "group by"
est ici une simplification raisonnable de ce que je suis en train de faire:
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)
)
)
Tous les conseils ou suggestions sont appréciés!
Non lié à la performance, mais checkout 'weighted.mean' dans la base – hadley
Oh, c'est pratique. Vous pouvez voir que j'ai appris R en recherchant pour ce que j'ai besoin de faire;) –