在R中将(0,1,0,0,1,1,1)转换为(0,0,0,1,0,1,2)

时间:2016-05-02 14:50:48

标签: r

我认为这是一个非常基本的问题,但我想看看是否有人能想出更优雅的解决方案。也许是通过避免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

1 个答案:

答案 0 :(得分:7)

我相信这应该有效:

sequence(rle(x)$lengths) - 1