按顺序拆分矢量

时间:2014-09-11 17:49:36

标签: r

以下向量x包含两个序列1:46: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也无效。

2 个答案:

答案 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