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]