r - 在 R 中将时间戳标记到 session 中

标签 r session timestamp

我有一系列代表用户在网站上的事件的时间戳。我想将这些时间戳区分为每个用户的 session (定义为与每个用户相距不超过 1800 秒的时间戳)。如果可能的话,我想在我的数据集中添加一个名为 session_nr 的列。 (例如,如果时间戳间隔超过 1800 秒或者是新用户,则 session 数应该增加。)

示例数据集如下所示:

user_id             date    
58683      2015-08-01 07:18:13 
58683      2015-08-01 07:18:19 
58683      2015-08-01 07:18:33 
58683      2015-08-01 07:18:43 
58683      2015-08-01 07:18:51 
58683      2015-08-01 07:18:58 

数据是根据每个用户和时间排序的。

有没有办法循环遍历 R 中的用户和一系列时间戳,以便我可以向数据集中的每一行添加 session 号?

我开始使用以下代码,但它不起作用,也不知道如何添加 session 号。

user_session <- function(user, time_limit, data){
  u1 <- data[which(data$user_id == user),]
  Sys.setlocale("LC_TIME", "en_US.UTF-8")
  u1$date <- as.POSIXct(u1$date)

  u1$s.start <- c(TRUE, timediff(u1$date) > time_limit )
  u1$s.stop  <- c(u1$s.start[2:length(u1$s.start)], TRUE)

  u1$sessions <- data.frame(
  s.1 = which(u1$s.start),  # starts
  s.2 = which(u1$s.stop))   # stops

  return(u1)
}

use <- as.data.frame(unique(data$user_id))
  time_limit <- 1800
  for (i in dim(use)[1]){
    user <-  use[i,1]
    res <- user_session(user, time_limit, data)
}

最佳答案

这是一个 dplyr 解决方案:

library(dplyr)
df %>% group_by(id) %>%
  mutate(time_since_last = as.numeric(date - lag(date))) %>% 
  mutate(new_session = is.na(time_since_last) | time_since_last > 1800) %>% 
  mutate(session_nr = cumsum(new_session))

关于r - 在 R 中将时间戳标记到 session 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42668936/

相关文章:

android - 如何检测 Android 设备是以秒还是毫秒为单位存储媒体日期?

java - System.nanoTime() 是否跨线程一致?

r - "if else"语句重复语句中的第一个值而不是计算每个值

r - 同时对多个因素的水平进行排序

php - 相同的网络用户使用相同的 session

php - 设置窗口位置为同一页面 PHP 购物车

r - 清除所有对象和包的R环境

R 和 Brew :syntax issue

php - 在 Facebook AJAX 请求中维护 PHP session

java - java中输出时间戳的Util类