ich einen Datensatz haben, die wie folgt aussieht:Unterschiede zwischen Zeilen schneller berechnen als eine for-Schleife?
ID | DATE | SCORE
-------------------------
123 | 1/15/10 | 10
123 | 1/1/10 | 15
124 | 3/5/10 | 20
124 | 1/5/10 | 30
...
So das obige Snippet als Datenrahmen zu laden, ist der Code:
id<-c(123,123,124,124)
date<-as.Date(c('2010-01-15','2010-01-01','2010-03-05','2010-01-05'))
score<-c(10,15,20,30)
data<-data.frame(id,date,score)
Ich versuche, ein hinzufügen Spalte, die die "Tage seit dem letzten Datensatz für diese ID" berechnet.
Im Moment bin ich mit einer FOR-Schleife, die etwa wie folgt aussieht:
data$dayssincelast <- rep(NA, nrow(data))
for(i in 2:nrow(data)) {
if(data$id[i] == data$id[i-1])
data$dayssincelast[i] <- data$date[i] - data$date[i-1]
}
Gibt es einen schnelleren Weg, dies zu tun? (Ich habe ein wenig in APPLY geschaut, aber kann nicht eine Lösung neben einer FOR-Schleife herausfinden.)
Vielen Dank im Voraus!
Bitte fügen Sie zu Ihrer Frage die Ausgabe von 'dput (Kopf (Daten))'. Ihre Daten sehen nicht wie etwas aus, das Sie subtrahieren können. – GSee
Es gibt viele Möglichkeiten, sich dem Split-Apply-Stück zu nähern, aber alle von ihnen werden wahrscheinlich mit 'diff' enden. – joran
@GSee - Ich habe es nicht angezeigt, aber ich habe die Daten bereits mit asDate() konvertiert. Das obige ist nur Dummy-Daten, um die Struktur zu veranschaulichen. –