我认为这是一个非常基本的问题,但是我想看看是否有人可以提出一个更优雅的解决方案。也许通过避免for循环。
我想要一个函数,该函数将1和0的向量作为输入,并返回相同长度的向量,该向量计算相同数目的先前位置数。
一个非常优雅的方法是:
count_me <- function(x) {
count_vector <- numeric(length(x))
for(i in 2:length(x)) {
if(x[i] == x[i-1]) count_vector[i] <- count_vector[i-1] + 1
}
count_vector
}
这恰好返回我想要的:
> (p <- sample(c(0,1), size = 10, replace = TRUE))
[1] 0 1 0 1 1 0 0 1 1 1
> count_me(p)
[1] 0 0 0 0 1 0 1 0 1 2
我相信这应该有效:
sequence(rle(x)$lengths) - 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句