gpt4 book ai didi

r - 聚合行及时关闭

转载 作者:行者123 更新时间:2023-12-04 12:05:47 26 4
gpt4 key购买 nike

我在 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

您可以像往常一样删除任何不需要的列

关于r - 聚合行及时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59772095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com