以下向量x
包含两个序列1:4
和6:7
,以及其他非连续数字。
x <- c(7, 1:4, 6:7, 9)
我希望按其序列分割x
,以便结果如下所示。
# [[1]]
# [1] 7
#
# [[2]]
# [1] 1 2 3 4
#
# [[3]]
# [1] 6 7
#
# [[4]]
# [1] 9
有一种快速简单的方法吗?
我已经尝试了
split(x, c(0, diff(x)))
接近,但我不想将0
附加到差异向量是正确的方法。使用findInterval
也无效。
答案 0 :(得分:16)
split(x, cumsum(c(TRUE, diff(x)!=1)))
#$`1`
#[1] 7
#
#$`2`
#[1] 1 2 3 4
#
#$`3`
#[1] 6 7
#
#$`4`
#[1] 9
答案 1 :(得分:1)
为了好玩,您可以使用Carl Witthoft's中的"cgwtools" package seqle
功能。 (它不会像Roland的答案那样高效。)
library(cgwtools)
## Here's what seqle does...
## It's like rle, but for sequences
seqle(x)
# Run Length Encoding
# lengths: int [1:4] 1 4 2 1
# values : num [1:4] 7 1 6 9
y <- seqle(x)
split(x, rep(seq_along(y$lengths), y$lengths))
# $`1`
# [1] 7
#
# $`2`
# [1] 1 2 3 4
#
# $`3`
# [1] 6 7
#
# $`4`
# [1] 9