给定逻辑向量x
:
x <- c(FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE,
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE)
如何根据每个x
模式拆分FALSE/TRUE
?当然,我们可以使用TRUE/FALSE
基于!x
模式进行拆分。
因此,拆分会搜索模式FALSE, FALSE, ..., FALSE , TRUE, TRUE, ..., TRUE
,直到我们再次到达FALSE
。在这一点上,我们停下来。换句话说,每当我们从TRUE
移动到FALSE
时,我们都会进行拆分。
以下是我最终的结果:
p <- which(diff(x)==-1)+1
split(x, cumsum(seq_along(x) %in% p))
所以输出是正确的:
# $`0`
# [1] FALSE FALSE FALSE TRUE TRUE
# $`1`
# [1] FALSE FALSE TRUE
# $`2`
# [1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE
# $`3`
# [1] FALSE TRUE
此问题的任何其他解决方案?更有效的方法吗?