使用特定元素作为分隔符拆分矢量

时间:2015-11-12 08:03:16

标签: r vector

例如,在下面的向量中,我想使用零元素作为分隔符

x <- c(12, 1, 2, 15, 18, 0, 15, 13, 14, 9, 1, 0, 22, 9, 14, 3, 9, 20)

并获取(可能在列表中)向量

c(12, 1, 2, 15, 18)
c(15, 13, 14, 9, 1)
c(22, 9, 14, 3, 9, 20)

你会如何在R?中做到这一点?

3 个答案:

答案 0 :(得分:4)

例如:

splt <- cumsum(x == 0)
splt[x == 0] <- NA
split(x, splt)
# $`0`
# [1] 12  1  2 15 18

# $`1`
# [1] 15 13 14  9  1

# $`2`
# [1] 22  9 14  3  9 20

答案 1 :(得分:1)

你可以这样做,

x <- c(12, 1, 2, 15, 18, 0, 15, 13, 14, 9, 1, 0, 22, 9, 14, 3, 9, 20)
lapply(strsplit(paste(x, collapse = ";"), "^0;|;0$|;0;"), function(y) {strsplit(y, ";")})[[1]]
# [[1]]
# [1] "12" "1"  "2"  "15" "18"

# [[2]]
# [1] "15" "13" "14" "9"  "1" 

# [[3]]
# [1] "22" "9"  "14" "3"  "9"  "20"

答案 2 :(得分:1)

另一种选择是使用rleid中的library(data.table)来创建分组变量,然后split使用&#39; x&#39;与分组变量不为0(x[!!x])。

library(data.table)
split(x[!!x], rleid(!x)[!!x])