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 aufteilenidsubtrahieren 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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage