在R中创建基于时间的用户会话

时间:2016-03-12 12:11:10

标签: r performance session

我有一个数据集,其中包含三列:用户,操作和时间,这是用户操作的日志。数据如下所示:

        user action       time
   1: 618663     34 1407160424
   2: 617608     33 1407160425
   3:  89514     34 1407160425
   4:  71160     33 1407160425
   5: 443464     32 1407160426
  ---                         
 996: 146038      8 1407161349
 997: 528997      9 1407161350
 998: 804302      8 1407161351
 999: 308922      8 1407161351
1000: 803763      8 1407161352

我想根据操作时间为每个用户分隔会话。在某个时期(例如一小时)内完成的操作将被假定为一个会话。 简单的解决方案是使用for循环并比较每个用户的操作时间,但这样做效率不高,而且我的数据非常大。 有什么方法可以用来克服这个问题吗? 我可以对用户进行分组,但将用户操作分成不同的会话对我来说有点困难: - )

1 个答案:

答案 0 :(得分:3)

尝试

library(data.table)
dt <- rbind(
  data.table(user=1, action=1:10, time=c(1,5,10,11,15,20,22:25)),
  data.table(user=2, action=1:5, time=c(1,3,10,11,12))
)
# dt[, session:=cumsum(c(T, !(diff(time)<=2))), by=user][]
#     user action time session
#  1:    1      1    1       1
#  2:    1      2    5       2
#  3:    1      3   10       3
#  4:    1      4   11       3
#  5:    1      5   15       4
#  6:    1      6   20       5
#  7:    1      7   22       5
#  8:    1      8   23       5
#  9:    1      9   24       5
# 10:    1     10   25       5
# 11:    2      1    1       1
# 12:    2      2    3       1
# 13:    2      3   10       2
# 14:    2      4   11       2
# 15:    2      5   12       2

我使用<=2的差异来收集会话。