Berechnen Sie die abgelaufenen „Zeiten“, wobei die Referenzzeit von einem Faktor abhängt
Ich versuche, die abgelaufenen Zeiten in einem Datenrahmen zu berechnen, wobei der Startwert für die abgelaufene Zeit vom Wert einer Faktorspalte im Datenrahmen abhängt. (Um die Frage zu vereinfachen, behandle ich die Zeitwerte eher als numerische als als Zeitobjekte - meine Frage bezieht sich auf Split-Apply-Combined, nicht auf Zeitobjekte). Mein Datenrahmen sieht folgendermaßen aus:
df <- data.frame(id=gl(2, 3, 5, labels=c("a", "b")), time=1:5)
Ich möchte die verstrichenen Zeiten durch Subtrahieren der Mindestzeit in jeder Faktorstufe von jeder Zeit berechnen (obwohl ich in diesem Beispiel nur auf numerische Werte und nicht auf Zeitwerte eingehen werde). Ich möchte also den Datenrahmen nach aufteilenid
subtrahieren Sie das Minimumy
Wert von jedem Element in dery
Spalte, und geben Sie einen Vektor (oder Datenrahmen) mit den transformierten Werten zurück. Ich möchte am Ende etwas haben wie:
> dfTrans
id time elapsed
a 1 0
a 2 1
a 3 2
b 4 0
b 5 1
Scheint eine perfekte Aufgabe für Plyr zu sein, aber ich kann keine einfache Lösung finden.
Das Beste, was ich mir einfallen lassen kann, ist
elapsed <- dlply(df, .(id), function(x) x$time - min(x$time))
elapsed_comb <- NA
for(i in 1:length(names(elapsed))) {
elapsed_comb <- c(elapsed_comb, elapsed[[i]])
}
elapsed_comb <- elapsed_comb[-1]
df$elapsed <- elapsed_comb
Das ist unelegant und scheint zerbrechlich. Sicher gibt es einen besseren Weg?