Für jede Ebene der Faktor-Aggregatwerte über alle Ebenen außer dem aktuellen
-
11-12-2019 - |
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?
Lösung
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