我有一个数据表如下:
DT1 <-
read.table(text = "
id time place_id
604 2017-08-10 18:44:14 15
604 2017-08-10 20:38:20 15
604 2017-08-10 20:54:26 24
604 2017-08-10 21:35:50 24
604 2017-08-11 12:05:42 30
604 2017-08-11 13:05:42 30
", header = TRUE, stringsAsFactors = FALSE)
由此我想计算每个id在每个place_id中花费的时间。
id time place_id
604 6846 15
604 2484 24
604 3600 30
我尝试这样做以获得每个区域的每个组
DT1[,follow_group_new := cumsum(difftime(time, shift(time, fill=-Inf), units="mins") > 5), by=list(id,place_id)]
这给了我每个小组。不知道如何从那里获得所需的输出。感谢任何帮助。
答案 0 :(得分:3)
您只需要计算每组id和place_id的最大时间戳和最小时间戳之间的差异。当然,在此操作之前,您必须将时间列转换为POSIXct。
library(data.table)
setDT(DT1)
DT1[, time := as.POSIXct(time)]
DT1[, .(time = difftime(max(time), min(time), units = "secs")),
by = .(id, place_id)]
# id place_id time
# 1: 604 15 6846 secs
# 2: 604 24 2484 secs
# 3: 604 30 3600 secs