私はこのようなデータフレームを有する介し大型データフレームの各行(実一つがはるかに大きい):time
変数は、車両がビデオ装置によって識別されることが時間を表しマーク二つの変数
time<-c(as.POSIXct('2011-11-11 06:00:00'),as.POSIXct('2011-11-11 06:05:00'),as.POSIXct('2011-11-11 07:05:00'),
as.POSIXct('2011-11-11 07:10:00'),as.POSIXct('2011-11-11 07:13:00'),as.POSIXct('2011-11-11 07:33:00'),
as.POSIXct('2011-11-11 05:05:00'),as.POSIXct('2011-11-11 06:05:00'),as.POSIXct('2011-11-11 06:20:00'),
as.POSIXct('2011-11-11 09:05:00'))
plate<-c('a','a','a','b','c','d','e','e','e','e')
df<-data.frame(time,plate)
。 plate
変数は車両のプレートを表します。データフレームは、まず第1にplate
、第2にtime
で整列されています。
これを踏まえて、各車両のトリップを行に印を付けて分けたいと思います。異なる車両(plates
)は確かに異なる旅行を表します。 1台の車両では、1回の旅行で特定された時間差は30分より短くなければなりません。そうでなければ、行は別の旅行に属している必要があります。私のように
、私は次のコードでこれを行います。
trip<-vector()
trip[1]<-1
time_diff<-as.POSIXct('2011-11-11 07:00:00')-as.POSIXct('2011-11-11 06:30:00')
for (x in 2:nrow(df)) {
if (!df$plate[x]==df$plate[x-1]) (trip[x]<-trip[x-1]+1
) else{if (df$time[x]-df$time[x-1]<time_diff) (trip[x]<-trip[x-1]
) else (trip[x]<-trip[x-1]+1)}
}
df<-cbind(df,trip)
しかし、私のdf
は、このように私の方法は非常に遅くなり700万人以上の行が含まれています。だから私はこれを行うより効率的な方法がいくつかあるかどうか尋ねています。