我有data.frame
来自网站日志的包含信息。在其他列中,data.frame
包含 cookie ID、时间戳和 URL。现在我想计算在每个页面上花费的时间,假设一个页面被查看,直到另一个页面被相同的 cookie ID 加载。这就是为什么data.frame
按 cookie ID 和时间戳排序的原因:
data = data[with(data, order(cookie_id, timestamp)), ]
以下是我使用for
循环计算每个页面花费的时间的方法:
data$calc_time_spent = NA
for (i in 1:(nrow(data)-1)) {
if (!is.na(data$cookie_id[i]) & !is.na(data$cookie_id[i+1]) & data$cookie_id[i] == data$cookie_id[i+1]) {
data$calc_time_spent[i] = data$timestamp[i+1]-data$timestamp[i]
}
}
不幸的是,这很慢,所以我需要一个更复杂的解决方案,也许使用应用函数?
-
以下是一些示例数据:
cookie_id = c("5", "5", "8", "8", "8")
timestamp = as.POSIXlt(c("2005-4-19 7:01:33", "2005-4-19 7:01:35", "2005-4-19 7:01:10", "2005-4-19 7:01:23", "2005-4-19 7:01:27"))
data = data.frame(timestamp, cookie_id)
看起来像这样:
timestamp cookie_id
1 2005-04-19 07:01:33 5
2 2005-04-19 07:01:35 5
3 2005-04-19 07:01:10 8
4 2005-04-19 07:01:23 8
5 2005-04-19 07:01:27 8
操作后数据应该有第三列:
timestamp cookie_id calc_time_spent
1 2005-04-19 07:01:33 5 2
2 2005-04-19 07:01:35 5 NA
3 2005-04-19 07:01:10 8 13
4 2005-04-19 07:01:23 8 4
5 2005-04-19 07:01:27 8 NA