例如,在下面的向量中,我想使用零元素作为分隔符
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?中做到这一点?
答案 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])