【问题标题】:data.table: Identify increasing contiguous sequence in data.tabledata.table:识别data.table中增加的连续序列
【发布时间】:2023-03-28 02:05:01
【问题描述】:

我正在尝试在 data.table 的列中识别一个连续递增的序列,并为每个唯一的连续序列分组分配一个标识符,但我很难想出一种矢量化的方法来快速识别这些序列.

我环顾四周,没有发现任何仅使用 data.table 语法和命令以矢量化方式执行此操作的东西,也许这不可能。

library(data.table)

DT <- data.table(ID=c(1,1,1,1),time=c(17,18,74,75),exposure=c(0,1,1,1))

我的数据如下所示:

   ID time exposure
1:  1   17        0
2:  1   18        1
3:  1   74        1
4:  1   75        1

我想创建一个新列来指示time 的哪些行是连续递增序列,如下所示:

   ID time exposure contiguous.groups
1:  1   17        0                x1
2:  1   18        1                x1
3:  1   74        1                x2
4:  1   75        1                x2

如果有人以前这样做过或知道如何开始,我们将不胜感激。

【问题讨论】:

    标签: r data.table grouping vectorization sequence


    【解决方案1】:

    我们可以取'time'相邻元素的diff来创建一个逻辑向量并得到累加和

    DT[, contiguous.groups := paste0("x", cumsum(c(TRUE, diff(time) != 1)))]
    DT
    #   ID time exposure contiguous.groups
    #1:  1   17        0                x1
    #2:  1   18        1                x1
    #3:  1   74        1                x2
    #4:  1   75        1                x2
    

    【讨论】:

    • 非常感谢!!这是非常整洁和非常有用的
    • @akrun 我和group := cumsum( c(0, diff(time)-1)) 差不多到了,但你打败了我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2022-11-15
    • 2020-05-16
    相关资源
    最近更新 更多