R 使用特定元素作为分隔符拆分向量
例如,在下面的向量中,我想使用零元素作为分隔符R 使用特定元素作为分隔符拆分向量,r,vector,R,Vector,例如,在下面的向量中,我想使用零元素作为分隔符 x <- c(12, 1, 2, 15, 18, 0, 15, 13, 14, 9, 1, 0, 22, 9, 14, 3, 9, 20) 您将如何在R中执行此操作?例如: 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] 2
x <- c(12, 1, 2, 15, 18, 0, 15, 13, 14, 9, 1, 0, 22, 9, 14, 3, 9, 20)
您将如何在R中执行此操作?例如:
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
splt例如:
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
splt您可以这样做
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"
x你可以这样做
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"
x另一个选项是使用library(data.table)
中的rleid
创建分组变量,然后split
与分组变量不为0(x[!!x]
)的“x”值
library(data.table)
split(x[!!x], rleid(!x)[!!x])
另一个选项是使用library(data.table)
中的rleid
创建分组变量,然后split
与分组变量不为0(x[!!x]
)的“x”值
library(data.table)
split(x[!!x], rleid(!x)[!!x])
这可能很好地解决了问题,但也请提供一个解释。许多新用户来到SO,对您的代码进行解释有助于他们学习如何调整代码以解决问题。@JenB或新用户加载数据。表格,并读取?rleid
,?!“
,?拆分。这也是一个很好的学习方式。我没有“瞄准”任何东西,也没有投反对票。您的帖子自动转到低质量的审阅队列,因为它只是代码。尽管您是一个高代表性用户,但我还是对该审查队列中的代码专用答案发表了标准评论(我并没有看到其他答案),因为我认为仅对低代表性用户发表这样的评论是不公平的。现在答案好多了。我把这个有趣的解决方案投了赞成票。我的回答也可以被认为是“仅代码”。这很可能解决问题,但也请提供解释。许多新用户来到SO,对您的代码进行解释有助于他们学习如何调整代码以解决问题。@JenB或新用户加载数据。表格,并读取?rleid
,?!“
,?拆分。这也是一个很好的学习方式。我没有“瞄准”任何东西,也没有投反对票。您的帖子自动转到低质量的审阅队列,因为它只是代码。尽管您是一个高代表性用户,但我还是对该审查队列中的代码专用答案发表了标准评论(我并没有看到其他答案),因为我认为仅对低代表性用户发表这样的评论是不公平的。现在答案好多了。我把这个有趣的解决方案投了赞成票。我的回答也可以被认为是“仅限代码”。