在R中的向量中查找连续值

use*_*912 2 r

如果我有这样的矢量:

dat <- c(1,2,3,4,5,19,20,21,56,80,81,92)
Run Code Online (Sandbox Code Playgroud)

如何将其分解为列表:

[[1]]
1 2 3 4 5

[[2]]
19 20 21

[[3]]
56

[[4]]
80 81

[[5]]
92
Run Code Online (Sandbox Code Playgroud)

A5C*_*2T1 12

只需splitdiff以下内容结合使用:

> split(dat, cumsum(c(1, diff(dat) != 1)))
$`1`
[1] 1 2 3 4 5

$`2`
[1] 19 20 21

$`3`
[1] 56

$`4`
[1] 80 81

$`5`
[1] 92
Run Code Online (Sandbox Code Playgroud)

不完全是你要求的,但"R.utils"包有几个相关的有趣功能:

library(R.utils)
seqToIntervals(dat)
#      from to
# [1,]    1  5
# [2,]   19 21
# [3,]   56 56
# [4,]   80 81
# [5,]   92 92
seqToHumanReadable(dat)
# [1] "1-5, 19-21, 56, 80-81, 92"
Run Code Online (Sandbox Code Playgroud)

  • 不,这个问题以前已经多次出现过了...... (2认同)