如何遵循按时间
问题描述:
我有如下数据帧:如何遵循按时间
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]