R 如何按时间分组
我有一个数据框,如下所示:R 如何按时间分组,r,data.table,lag,R,Data.table,Lag,我有一个数据框,如下所示: 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-
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]
只需执行
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]