【问题标题】:Analyze timestamp data in Sas or R在 Sas 或 R 中分析时间戳数据
【发布时间】:2014-07-11 21:56:02
【问题描述】:

我有一系列时间戳代表用户在网站上的活动。我想将这些时间戳区分为会话(定义为相隔不到一小时的时间戳),计算每个会话的长度以及会话之间的间隔。

示例数据集如下所示:

有没有办法在 sas 或 R 中循环遍历这一系列时间戳,以便我可以计算会话长度(例如:01JUL14 中的 23:00 会话)并计算会话之间的间隔(7 月 1 日之间的时间间隔和 7 月 9 日)

谢谢!

【问题讨论】:

  • 首先,您需要定义什么是会话:静态定义(同一天?没有不活动> 1 小时?...)?或者类似集群的东西?
  • 嗨 Martin,会话定义为一小时内的时间戳。
  • 最好将可复制/可粘贴的示例数据连同所需的输出一起发布。这样我们就可以测试以确保任何可能的建议都返回您想要的值。
  • @MrFlick 我已将此问题简化为另一个问题,请在此处查看所需的输出。谢谢! stackoverflow.com/questions/24748191/…

标签: r loops sas


【解决方案1】:
# reproducible input data
dta <- data.frame(time = as.POSIXlt(c("2006-10-21 18:47:22",
                                      "2006-10-21 18:57:58",
                                      "2006-10-21 19:59:05",
                                      "2006-10-21 20:05:05",
                                      "2006-10-21 20:06:05",
                                      "2006-10-21 20:07:05",
                                      "2006-10-21 22:04:05",
                                      "2006-10-21 22:05:05")))
# see which timestamps are the start/stop of a session. 
# Hope that meets your definition of (inactivity less than) 1 hr for one session
dta$s.start <- c(TRUE, diff(dta$time) > 60)  # TRUE = start of new session, 60 min as max duration of a session
dta$s.stop  <- c(dta$s.start[2:length(dta$s.start)], TRUE) # TRUE = stop of this session

# indices of the timestamps that mar a session
sessions <- data.frame(
  s.1 = which(dta$s.start),  # starts
  s.2 = which(dta$s.stop))   # stops

# duration and gaps
(durations <- dta$time[sessions$s.2] - dta$time[sessions$s.1])
(gaps <- dta$time[sessions$s.1[2:length(sessions$s.1)]] - dta$time[sessions$s.2[1:length(sessions$s.2)-1]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-19
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2021-03-13
    相关资源
    最近更新 更多