沿数字向量排序,仅在触发值处增加序列
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
我有一个按 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