- 此问题在此处已有答案**:
Create grouping variable for consecutive sequences and split vector(5个答案)
4天前关闭。
我在df中有以下序列(下面的dput
):
> df
value
1 -2
2 -1
3 0
4 1
5 2
6 -3
7 -2
8 -1
9 0
10 1
11 -1
12 0
13 1
14 -10
15 -9
16 -8
17 -7
序列中的值与前一个值之间的差总是+1,这意味着期望的输出应该如下所示:
value group
1 -2 1
2 -1 1
3 0 1
4 1 1
5 2 1
6 -3 2
7 -2 2
8 -1 2
9 0 2
10 1 2
11 -1 3
12 0 3
13 1 3
14 -10 4
15 -9 4
16 -8 4
17 -7 4
正如你所看到的,第一个序列是-2,-1,0,1,2,下一个值是-3,它以一个新的序列开始,我尝试了下面的代码:
library(dplyr)
df %>%
group_by(grp = cumsum(coalesce(value == -lag(value, n = 1), TRUE)))
#> # A tibble: 17 × 2
#> # Groups: grp [2]
#> value grp
#> <dbl> <int>
#> 1 -2 1
#> 2 -1 1
#> 3 0 1
#> 4 1 1
#> 5 2 1
#> 6 -3 1
#> 7 -2 1
#> 8 -1 1
#> 9 0 1
#> 10 1 1
#> 11 -1 2
#> 12 0 2
#> 13 1 2
#> 14 -10 2
#> 15 -9 2
#> 16 -8 2
#> 17 -7 2
创建于2023年1月23日,使用reprex v2.0.2
因为序列之间的随机移位,所以这不起作用,所以我想知道是否有人知道如何对这些随机序列进行分组?
df的dput
:
df<-structure(list(value = c(-2, -1, 0, 1, 2, -3, -2, -1, 0, 1, -1,
0, 1, -10, -9, -8, -7)), class = "data.frame", row.names = c(NA,
-17L))
1条答案
按热度按时间wgeznvg71#
编辑:如果序列始终在同一方向,则不需要
abs
。您要查找绝对差值不为1的值:
或者使用
lag
: