提问人:Quinten 提问时间:1/23/2023 最后编辑:Quinten 更新时间:1/23/2023 访问量:45
在 R 中对随机序列进行分组 [duplicate]
Group random sequences in R [duplicate]
问:
我在 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-01-23 使用 reprex v2.0.2
由于序列之间的随机移位,这不起作用。所以我想知道是否有人知道如何对这些随机序列进行分组?
dput
DF:
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))
答:
2赞
Maël
1/23/2023
#1
编辑:如果序列始终在同一方向上,则不需要。abs
您想要查找绝对差值不同于 1 的值:
library(dplyr)
df %>%
group_by(grp = cumsum(c(TRUE, abs(diff(df$value)) != 1)))
或者与:lag
df %>%
group_by(grp = cumsum(abs((value - lag(value, default = TRUE))) != 1))
上一个:完成序列列名称并填充 R
下一个:更改天数顺序
评论
cumsum(c(TRUE, diff(df$value) != 1))