私はこのようになり、データ・セットがありますので、データフレームとして上記のスニペットをロードするために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の最終レコード以降の日数」を計算する列。これを行うためのより高速な方法はあり
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]
}
:
今私はこのようになりますFORループを使用していますか?(私はAPPLYを少し見たことがありますが、FORループ以外の解決策を見つけることはできません)
ありがとうございます!
'dput(head(data))の出力をあなたの質問に追加してください。あなたの日付は、あなたが引くことができるもののようには見えません。 – GSee
スプリット・アプライ・ピースにアプローチする方法はたくさんありますが、それらはすべておそらく 'diff'を使って終わるでしょう。 – joran
@GSee - 私はそれを示していませんでしたが、すでにas.Date()を使って日付を変換しました。上記は構造を説明するためのダミーデータです。 –