R: ускорение операций «группировки по»

У меня есть симуляция, которая имеет огромный агрегат и комбинирует шаг прямо посередине. Я прототипировал этот процесс, используя функцию plyr ddply (), которая отлично подходит для огромного процента моих потребностей. Но мне нужно, чтобы этот этап агрегации был быстрее, поскольку мне нужно запускать моделирование 10K. Я уже параллельно масштабирую симуляции, но если бы этот шаг был быстрее, я мог бы значительно уменьшить количество необходимых мне узлов.

Вот ' Разумное упрощение того, что я пытаюсь сделать:

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)
                                 )
           )

Все советы и предложения приветствуются!

36
задан Matt Dowle 19 April 2013 в 09:24
поделиться