Frage

Für jedes Faktorenniveau muss ich Werte extrahieren, um Werte über alle Untermengen von Daten aggregieren. Ausnahme des aktuellen.Zum Beispiel gibt es mehrere Probanden, die während einiger Tage eine Reaktionszeitaufgabe tätigen, und ich muss die mittlere Reaktionszeit für alle Themen und alle Tage berechnen, jedoch nicht das Thema, für das der Mittelwert berechnet wird.Derzeit mache ich es so: generasacodicetagpre.

Es funktioniert gut für kleine Datensätze, aber für große kann es sehr langsam sein.Gibt es eine Möglichkeit, es schneller zu tun?

War es hilfreich?

Lösung

generasacodicetagpre.

Für wirklich große Datensätze sollte der Geschwindigkeitszunachsgang ausgeprägter sein.Ich konnte einfach nicht mit größeren Datensätzen vergleichen, da der ddply so langsam ist.

Andere Tipps

Maybe it's faster with lapply and aggregate:

do.call("rbind", (lapply(unique(sleepstudy$Subject),
                         function(x)
                           cbind(Subject = x,
                                 aggregate(Reaction ~ Days,
                                           subset(sleepstudy, Subject != x),
                                           mean)))))

Update:

I compared both commands with system.time and it appears the original is slower.

library(lme4)
library(plyr)

system.time(
ddply(sleepstudy, .(Subject, Days), summarise, 
      avg_rt = mean(sleepstudy[sleepstudy$Subject != Subject &
                    sleepstudy$Days == Days,"Reaction"]))
)

   # user  system elapsed 
   # 0.17    0.00    0.22 

system.time(
do.call("rbind", (lapply(unique(sleepstudy$Subject),
                         function(x) 
                           cbind(Subject = x,
                                 aggregate(Reaction ~ Days,
                                           subset(sleepstudy, Subject != x),
                                           mean)))))
)


   # user  system elapsed 
   # 0.12    0.00    0.12 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top