【问题标题】:Create group index to group by repeating values in a sorted data.table [duplicate]通过在已排序的 data.table 中重复值来创建组索引以进行分组
【发布时间】:2017-05-25 08:27:49
【问题描述】:

我想对时间序列中的组执行一些汇总统计。这是我所拥有的

test = data.table(ind=c(1:8), val = c(0,0,1,1,1,0,0,1))

    ind val
1:   1   0
2:   2   0
3:   3   1
4:   4   1
5:   5   1
6:   6   0
7:   7   0
8:   8   1

如何创建第三列作为我的组索引?像这样 -

    ind val group_id
1:   1   0        1
2:   2   0        1
3:   3   1        2
4:   4   1        2
5:   5   1        2
6:   6   0        3
7:   7   0        3
8:   8   1        4

我对有效的解决方案感兴趣(因为现实生活中的桌子很大),并且希望避免直截了当 for loop

【问题讨论】:

  • 试试data.table::rleid:test[, group_id := rleid(val)]。
  • @mt1022 您介意将其发布为回复吗?我已经使用 data.table 多年,但不知道这个相当新的“便利”功能
  • @RInatM,当然。我最初认为这很简单,应该是一个重复。许多答案使用rleid。但是我还没有找到合适的。

标签: r loops data.table


【解决方案1】:

data.table::rleid 专为此类工作而设计。它生成运行长度类型的 ID,如 ?rleid 中所述。

这种情况你可以试试:

test[, group_id := rleid(val)]

【讨论】:

    猜你喜欢
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2020-04-01
    • 2020-07-29
    • 2018-07-26
    • 2018-08-07
    • 1970-01-01
    相关资源
    最近更新 更多