在R中创建会话/访问ID

在R中创建会话/访问ID,r,R,假设我有一个如下所示的数据集: id date.time date.time1 diff n.diff ___984A39Pok8OrVfPhn2Q 2013-09-14 16:21:09 2013-09-14 16:21:51 -42 secs 42 ___984A39Pok8OrVfPhn2Q 2013-09-14 16:21:51 2013-09-14 16:2

假设我有一个如下所示的数据集:

                 id                  date.time          date.time1     diff      n.diff  
___984A39Pok8OrVfPhn2Q 2013-09-14 16:21:09 2013-09-14 16:21:51     -42 secs     42   
___984A39Pok8OrVfPhn2Q 2013-09-14 16:21:51 2013-09-14 16:22:22     -31 secs     31   
___984A39Pok8OrVfPhn2Q 2013-09-14 16:22:22 2013-09-15 11:42:24  -69602 secs  69602   
___984A39Pok8OrVfPhn2Q 2013-09-15 11:42:24 2013-09-15 11:42:39     -15 secs     15   
___984A39Pok8OrVfPhn2Q 2013-09-15 11:42:39 2013-09-15 11:43:02     -23 secs     23   
___984A39Pok8OrVfPhn2Q 2013-09-15 11:43:02 2013-09-15 11:43:55     -53 secs     53   
___984A39Pok8OrVfPhn2Q 2013-09-15 11:43:55 2013-09-15 11:44:28     -33 secs     33   
___984A39Pok8OrVfPhn2Q 2013-09-15 11:44:28 2013-09-15 11:45:03     -35 secs     35   
___984A39Pok8OrVfPhn2Q 2013-09-15 11:45:03                <NA>      NA secs     NA   
___WYOJCtZPSqDqtBYaiVA 2013-09-09 23:04:32 2013-09-09 23:05:05     -33 secs     33   
___WYOJCtZPSqDqtBYaiVA 2013-09-09 23:05:05                <NA>      NA secs     NA   
__-C0RFVOSmYSHyoEn-IYw 2013-09-11 23:18:11 2013-09-11 23:18:26     -15 secs     15   
__-C0RFVOSmYSHyoEn-IYw 2013-09-11 23:18:26 2013-09-11 23:18:31      -5 secs      5   
__-C0RFVOSmYSHyoEn-IYw 2013-09-11 23:18:31 2013-09-11 23:19:11     -40 secs     40   
__-C0RFVOSmYSHyoEn-IYw 2013-09-11 23:19:11 2013-09-11 23:19:31     -20 secs     20   
__-C0RFVOSmYSHyoEn-IYw 2013-09-11 23:19:31 2013-09-12 17:07:54  -64103 secs  64103   
__-C0RFVOSmYSHyoEn-IYw 2013-09-12 17:07:54 2013-09-12 17:08:02      -8 secs      8   
__-C0RFVOSmYSHyoEn-IYw 2013-09-12 17:08:02 2013-09-12 17:08:15     -13 secs     13   
__-C0RFVOSmYSHyoEn-IYw 2013-09-12 17:08:15 2013-09-12 17:08:22      -7 secs      7  
 fun <- function(x, ses_TH) cumsum(c(TRUE, diff(x$date.time) > ses_TH))
id date.time date.time1 diff n.diff
___984A39Pok8OrVfPhn2Q 2013-09-14 16:21:09 2013-09-14 16:21:51-42秒42
___984A39Pok8OrVfPhn2Q 2013-09-1416:21:51 2013-09-1416:22:22-31秒31
___984A39Pok8OrVfPhn2Q 2013-09-14 16:22:22 2013-09-15 11:42:24-69602秒69602
___984A39Pok8OrVfPhn2Q 2013-09-15 11:42:24 2013-09-15 11:42:39-15秒15
___984A39Pok8OrVfPhn2Q 2013-09-15 11:42:39 2013-09-15 11:43:02-23秒23
___984A39Pok8OrVfPhn2Q 2013-09-15 11:43:02 2013-09-15 11:43:55-53秒53
___984A39Pok8OrVfPhn2Q 2013-09-15 11:43:55 2013-09-15 11:44:28-33秒33
___984A39Pok8OrVfPhn2Q 2013-09-15 11:44:28 2013-09-15 11:45:03-35秒35
___984A39Pok8OrVfPhn2Q 2013-09-15 11:45:03不适用
___Wyojctzpsqdqtqtbyaiva 2013-09-09 23:04:32 2013-09-09 23:05:05-33秒33
___Wyojctzpsqdqtqtbyaiva 2013-09-09 23:05:05不适用
__-C0RFVOSmYSHyoEn IYw 2013-09-11 23:18:11 2013-09-11 23:18:26-15秒15
__-C0RFVOSmYSHyoEn IYw 2013-09-11 23:18:26 2013-09-11 23:18:31-5秒5
__-C0RFVOSmYSHyoEn IYw 2013-09-11 23:18:31 2013-09-11 23:19:11-40秒40
__-C0RFVOSmYSHyoEn IYw 2013-09-11 23:19:11 2013-09-11 23:19:31-20秒20
__-C0RFVOSmYSHyoEn IYw 2013-09-11 23:19:31 2013-09-12 17:07:54-64103秒64103
__-C0RFVOSmYSHyoEn IYw 2013-09-12 17:07:54 2013-09-12 17:08:02-8秒8
__-C0RFVOSmYSHyoEn IYw 2013-09-12 17:08:02 2013-09-12 17:08:15-13秒13
__-C0RFVOSmYSHyoEn IYw 2013-09-12 17:08:15 2013-09-12 17:08:22-7秒7
我想按用户创建一个会话id,它包含两个会话之间的最大超时时间不超过30分钟或1800秒的所有实例。我应该以这样的方式结束:

            id                  date.time          date.time1     diff      n.diff   session
___984A39Pok8OrVfPhn2Q 2013-09-14 16:21:09 2013-09-14 16:21:51     -42 secs     42      1
___984A39Pok8OrVfPhn2Q 2013-09-14 16:21:51 2013-09-14 16:22:22     -31 secs     31      1
___984A39Pok8OrVfPhn2Q 2013-09-14 16:22:22 2013-09-15 11:42:24  -69602 secs  69602      1
___984A39Pok8OrVfPhn2Q 2013-09-15 11:42:24 2013-09-15 11:42:39     -15 secs     15      2
___984A39Pok8OrVfPhn2Q 2013-09-15 11:42:39 2013-09-15 11:43:02     -23 secs     23      2
___984A39Pok8OrVfPhn2Q 2013-09-15 11:43:02 2013-09-15 11:43:55     -53 secs     53      2
___984A39Pok8OrVfPhn2Q 2013-09-15 11:43:55 2013-09-15 11:44:28     -33 secs     33      2
___984A39Pok8OrVfPhn2Q 2013-09-15 11:44:28 2013-09-15 11:45:03     -35 secs     35      2
___984A39Pok8OrVfPhn2Q 2013-09-15 11:45:03                <NA>      NA secs     NA      2
___WYOJCtZPSqDqtBYaiVA 2013-09-09 23:04:32 2013-09-09 23:05:05     -33 secs     33      1
___WYOJCtZPSqDqtBYaiVA 2013-09-09 23:05:05                <NA>      NA secs     NA      1
__-C0RFVOSmYSHyoEn-IYw 2013-09-11 23:18:11 2013-09-11 23:18:26     -15 secs     15      1
__-C0RFVOSmYSHyoEn-IYw 2013-09-11 23:18:26 2013-09-11 23:18:31      -5 secs      5      1
__-C0RFVOSmYSHyoEn-IYw 2013-09-11 23:18:31 2013-09-11 23:19:11     -40 secs     40      1
__-C0RFVOSmYSHyoEn-IYw 2013-09-11 23:19:11 2013-09-11 23:19:31     -20 secs     20      1
__-C0RFVOSmYSHyoEn-IYw 2013-09-11 23:19:31 2013-09-12 17:07:54  -64103 secs  64103      1
__-C0RFVOSmYSHyoEn-IYw 2013-09-12 17:07:54 2013-09-12 17:08:02      -8 secs      8      2
__-C0RFVOSmYSHyoEn-IYw 2013-09-12 17:08:02 2013-09-12 17:08:15     -13 secs     13      2
__-C0RFVOSmYSHyoEn-IYw 2013-09-12 17:08:15 2013-09-12 17:08:22      -7 secs      7      2
id date.time date.time1 diff n.diff会话
___984A39Pok8OrVfPhn2Q 2013-09-14 16:21:09 2013-09-14 16:21:51-42秒42 1
___984A39Pok8OrVfPhn2Q 2013-09-14 16:21:51 2013-09-14 16:22:22-31秒31 1
___984A39Pok8OrVfPhn2Q 2013-09-14 16:22:22 2013-09-15 11:42:24-69602秒69602 1
___984A39Pok8OrVfPhn2Q 2013-09-15 11:42:24 2013-09-15 11:42:39-15秒12
___984A39Pok8OrVfPhn2Q 2013-09-15 11:42:39 2013-09-15 11:43:02-23秒23 2
___984A39Pok8OrVfPhn2Q 2013-09-15 11:43:02 2013-09-15 11:43:55-53秒53 2
___984A39Pok8OrVfPhn2Q 2013-09-15 11:43:55 2013-09-15 11:44:28-33秒33 2
___984A39Pok8OrVfPhn2Q 2013-09-15 11:44:28 2013-09-15 11:45:03-35秒35 2
___984A39Pok8OrVfPhn2Q 2013-09-15 11:45:03 NA秒NA 2
___Wyojctzpsqdqtqtbyaiva 2013-09-09 23:04:32 2013-09-09 23:05:05-33秒33 1
___Wyojctzpsqdqtqtbyaiva 2013-09-09 23:05:05不适用
__-C0RFVOSmYSHyoEn IYw 2013-09-11 23:18:11 2013-09-11 23:18:26-15秒15 1
__-C0RFVOSmYSHyoEn IYw 2013-09-11 23:18:26 2013-09-11 23:18:31-5秒51
__-C0RFVOSmYSHyoEn IYw 2013-09-11 23:18:31 2013-09-11 23:19:11-40秒40 1
__-C0RFVOSmYSHyoEn IYw 2013-09-11 23:19:11 2013-09-11 23:19:31-20秒21
__-C0RFVOSmYSHyoEn IYw 2013-09-11 23:19:31 2013-09-12 17:07:54-64103秒64103 1
__-C0RFVOSmYSHyoEn IYw 2013-09-12 17:07:54 2013-09-12 17:08:02-8秒8 2
__-C0RFVOSmYSHyoEn IYw 2013-09-12 17:08:02 2013-09-12 17:08:15-13秒13 2
__-C0RFVOSmYSHyoEn IYw 2013-09-12 17:08:15 2013-09-12 17:08:22-7秒

感谢您的帮助。

首先确保您使用的是日期和时间:

# mat =  your posted data
mat[ , 2] <- as.POSIXct(mat[ , 2])
mat[ , 3] <- as.POSIXct(mat[ , 3])
其中,在您的示例中,
ses_TH
是会话阈值

现在,我在所有唯一id上使用此功能:

get_session_id <- function(mat, ses_TH = 1800){
  fun <- function(x, ses_TH) cumsum(c(TRUE, diff(x$date.time) > ses_TH))
  unlist(sapply(split(mat, f = mat$ID), fun, ses_TH = ses_TH))
}

向我们展示一些您尝试过的代码,以及出错的地方。@hexafraction counter=ddply(test2.slide,.(UserId),transform,session=1+cumsum(I(n.diff>1800)))非常整洁。。。我做了一些修改,但功能非常有效。多谢!
___984A39Pok8OrVfPhn2Q1 ___984A39Pok8OrVfPhn2Q2 ___984A39Pok8OrVfPhn2Q3 
                      1                       1                       1 
___984A39Pok8OrVfPhn2Q4 ___984A39Pok8OrVfPhn2Q5 ___984A39Pok8OrVfPhn2Q6 
                      2                       2                       2 
___984A39Pok8OrVfPhn2Q7 ___984A39Pok8OrVfPhn2Q8 ___984A39Pok8OrVfPhn2Q9 
                      2                       2                       2 
___WYOJCtZPSqDqtBYaiVA1 ___WYOJCtZPSqDqtBYaiVA2 __-C0RFVOSmYSHyoEn-IYw1 
                      1                       1                       1 
__-C0RFVOSmYSHyoEn-IYw2 __-C0RFVOSmYSHyoEn-IYw3 __-C0RFVOSmYSHyoEn-IYw4 
                      1                       1                       1 
__-C0RFVOSmYSHyoEn-IYw5 __-C0RFVOSmYSHyoEn-IYw6 __-C0RFVOSmYSHyoEn-IYw7 
                      1                       2                       2 
__-C0RFVOSmYSHyoEn-IYw8 
                      2