r - 聚合行及时关闭
问题描述
我在 R 中有一个数据集,格式如下:
data = data.table(
id = c(1, 2, 2, 2, 3, 3, 3, 3 ,3, 3),
Start = c("2019-03-01 09:15:36",
"2019-01-01 08:00:00", "2019-01-01 08:00:10","2019-01-01 08:00:30",
"2019-01-01 08:00:30", "2019-01-01 08:00:40","2019-01-01 08:00:50",
"2019-01-01 08:01:10", "2019-01-01 08:01:20","2019-01-01 08:01:31"
))
data$Start = as.POSIXct(data$Start ,format = "%Y-%m-%d %H:%M:%S")
每行代表与一个人的交互,每个人由 id 标识(在示例数据集中,我有 3 个人)。根据定义,应合并开始日期之间少于 15 秒的交互(仅计为一次)。这个 15 秒的窗口应该随着每次新的交互而延长(参见第 3 个人的示例结果)。
鉴于此规则,对于data
,我想创建一个标识唯一交互的 newID 列。结果应该是:
data$newID
[1] 1 2 2 3 4 4 4 5 5 5
这就像应该在 内可能发生的事情data.table
,没有低效的for
循环,但我不能让它工作......
解决方案
一种方法是在每次值大于 15 时计算差异并更改组
data[, new := c(NA,diff.difftime(Start))][, new_id := cumsum(c(1, abs(na.omit(new)) >= 15))]
这使,
id Start new new_id 1: 1 2019-03-01 09:15:36 NA 1 2: 2 2019-01-01 08:00:00 -5102136 2 3: 2 2019-01-01 08:00:10 10 2 4: 2 2019-01-01 08:00:30 20 3 5: 3 2019-01-01 08:00:00 -30 4 6: 3 2019-01-01 08:00:10 10 4 7: 3 2019-01-01 08:00:20 10 4 8: 3 2019-01-01 08:00:40 20 5 9: 3 2019-01-01 08:00:50 10 5 10: 3 2019-01-01 08:01:01 11 5
您可以像往常一样删除任何不需要的列