如何遵循按时间

问题描述:

我有如下数据帧:如何遵循按时间

user time 
____ ____ 
1  2017-09-01 00:01:01 
1  2017-09-01 00:01:20 
1  2017-09-01 00:03:01 
1  2017-09-01 00:10:01 
1  2017-09-01 00:11:01 
2  2017-09-01 00:01:03 
2  2017-09-01 00:01:08 
2  2017-09-01 00:03:01 

从这个数据帧我想创建后续组为每个用户象下面这样:

user   time      follow_group 
____ ____________________    _____________        
1  2017-09-01 00:01:01     1 
1  2017-09-01 00:01:20     1 
1  2017-09-01 00:03:01     1 
1  2017-09-01 00:10:01     2 
1  2017-09-01 00:11:01     2 
2  2017-09-01 00:01:03     1 
2  2017-09-01 00:01:08     1 
2  2017-09-01 00:03:01     1 

后续当每个用户的时间差大于5分钟时改变组。

我试图通过采取滞后和减去:

data[, previous_request_time:=c(NA, time[-.N]), by=user] 

但是,这似乎并没有工作。任何帮助表示赞赏。

只要做一个difftime操作并检查差异是否大于5分钟。然后累计总和会给你的组计数器:

dat[, 
    follow_group := cumsum(difftime(time, shift(time, fill=-Inf), units="mins") > 5), 
    by=user 
] 

# user    time follow_group 
#1: 1 2017-09-01 00:01:01   1 
#2: 1 2017-09-01 00:01:20   1 
#3: 1 2017-09-01 00:03:01   1 
#4: 1 2017-09-01 00:10:01   2 
#5: 1 2017-09-01 00:11:01   2 
#6: 2 2017-09-01 00:01:03   1 
#7: 2 2017-09-01 00:01:08   1 
#8: 2 2017-09-01 00:03:01   1 

你可以同样只使用diff,如果你不想太明确有关单位:

dat[, flwgrp := cumsum(c(Inf, diff(time)) > 5*60), by=user]