我认为这是一个非常基本的问题,但我想看看是否有人能想出更优雅的解决方案。也许是通过避免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
答案 0 :(得分:7)
我相信这应该有效:
sequence(rle(x)$lengths) - 1