¿Calcular diferencias entre filas más rápido que un bucle for?
Tengo un conjunto de datos que se ve así:
ID | DATE | SCORE
-------------------------
123 | 1/15/10 | 10
123 | 1/1/10 | 15
124 | 3/5/10 | 20
124 | 1/5/10 | 30
...
Entonces, para cargar el fragmento de código anterior como un marco de datos, el código es:
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)
Estoy intentando agregar una columna que calcula los "días desde el último registro para esta ID".
En este momento estoy usando un bucle FOR que se parece a esto:
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]
}
¿Hay una manera más rápida de hacer esto? (He buscado un poco en APLICAR pero no puedo encontrar una solución que no sea un bucle FOR).
¡Gracias por adelantado!