沿数字向量排序,仅在触发值处增加序列

Sequence along numeric vector, increasing sequence only at trigger values

我有一个按 ID 排序的 data.frame,其中包含一列数值,我想将其分组,仅当超过某个目标 value/trigger 时才增加组数。我在 seq()seq_along()data.table cumsum() 上都没有成功,但我相信一定有办法

示例 data.frame 下方包含所需的组列。在此示例中,当值列中出现数字 >= 300 时,生成组列的序列应增加

dat = data.frame(ID=1:10, value=c(0,2,1,12,68,300,41,0,72959,51), group=c(1,1,1,1,1,2,2,2,3,3))

> dat
   ID value group
1   1     0     1
2   2     2     1
3   3     1     1
4   4    12     1
5   5    68     1
6   6   300     2
7   7    41     2
8   8     0     2
9   9 72959     3
10 10    51     3

我们可以在逻辑向量上使用cumsum来创建组

library(dplyr)
dat %>%
     mutate(group2 = cumsum(value >=300)+ 1)

-输出

   ID value group group2
1   1     0     1      1
2   2     2     1      1
3   3     1     1      1
4   4    12     1      1
5   5    68     1      1
6   6   300     2      2
7   7    41     2      2
8   8     0     2      2
9   9 72959     3      3
10 10    51     3      3