我有一個數據集,看起來像這樣:計算行之間的差異比for循環更快嗎?
ID | DATE | SCORE
-------------------------
123 | 1/15/10 | 10
123 | 1/1/10 | 15
124 | 3/5/10 | 20
124 | 1/5/10 | 30
...
所以加載上面的代碼作爲一個數據幀,代碼:
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)
我試圖加列計算「此ID以來的最後一次記錄後的天數」。
現在我使用一個for循環,看起來是這樣的:
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]
}
有一個更快的方法來做到這一點?(我已經看了一下APPLY,但不能完全弄清除FOR循環之外的解決方案。)
在此先感謝!
請向你的問題添加'dput(head(data))'的輸出。你的日期看起來不像你可以減去的東西 – GSee
有很多方法可以實現拆分應用,但所有這些方法最終都可能使用'diff'。 – joran
@GSee - 我沒有顯示它,但我已經使用as.Date()轉換了日期。以上只是虛擬數據來說明結構。 –