gpt4 book ai didi

r - 如何找到连续数字的间隔开始和结束的地方?

转载 作者:行者123 更新时间:2023-12-05 00:51:36 24 4
gpt4 key购买 nike

我有一个向量

vec <- c(2, 3, 5, 6, 7, 8, 16, 19, 22, 23, 24)

连续数是:

c(2, 3)
c(5, 6, 7, 8)
c(22, 23, 24)

所以第一个向量从2开始,到3结束;

对于第二个向量,从 5 开始,到 8 结束;

对于第三个向量,从 22 开始,到 24 结束;

有识别连续数字从哪里开始和结束的功能吗?

最佳答案

通过diff检查每个连续值之间的差异,可以发现差异不是+1的地方。

diff(vec)
## [1] 1 2 1 1 1 8 3 3 1 1
c(1, diff(vec)) != 1
## [1] FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE

然后用cumsum制作组标识符:

cumsum(c(1, diff(vec))!=1)
## [1] 0 0 1 1 1 1 2 3 4 4 4

并使用它来拆分您的数据:

split(vec, cumsum(c(1, diff(vec))!=1))
##$`0`
##[1] 2 3
##
##$`1`
##[1] 5 6 7 8
##
##$`2`
##[1] 16
##
##$`3`
##[1] 19
##
##$`4`
##[1] 22 23 24

可以过滤为连续值:

Filter(\(x) length(x) > 1, split(vec, cumsum(c(1, diff(vec))!=1)))
##$`0`
##[1] 2 3
##
##$`1`
##[1] 5 6 7 8
##
##$`4`
##[1] 22 23 24

关于r - 如何找到连续数字的间隔开始和结束的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71594430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com