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

3
我认为这是一个很基本的问题,但我想看看是否有更优雅的解决方案。也许可以避免使用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个回答

7

我相信这应该可以工作:

sequence(rle(x)$lengths) - 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接