Oblicz „minione” czasy, w których czas odniesienia zależy od czynnika
Próbuję obliczyć czasy, które upłynęły w ramce danych, gdzie wartość „start” dla czasu, który upłynął, zależy od wartości kolumny czynnika w ramce danych. (Aby po prostu zadać pytanie, będę traktował wartości czasu jako obiekty numeryczne, a nie czasowe - moje pytanie dotyczy obiektów split-apply-Combine, a nie obiektów czasu). Moja ramka danych wygląda tak:
df <- data.frame(id=gl(2, 3, 5, labels=c("a", "b")), time=1:5)
Chciałbym obliczyć czasy, które upłynęły, odejmując minimalny czas w każdym poziomie współczynnika od każdego czasu (chociaż dla tego przykładu zajmę się po prostu wartościami liczbowymi, a nie wartościami czasu). Chciałbym więc podzielić ramkę danych wedługid
, odejmij minimumy
wartość z każdego elementu wy
kolumna i zwróć wektor (lub ramkę danych) z przekształconymi wartościami. Chcę skończyć z czymś w rodzaju:
> dfTrans
id time elapsed
a 1 0
a 2 1
a 3 2
b 4 0
b 5 1
Wydaje się, że jest to idealne zadanie dla plyr, ale nie mogę znaleźć prostego rozwiązania.
Najlepsze, co mogę wymyślić, to
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
To jest nieeleganckie i wydaje się kruche. Z pewnością jest lepszy sposób?