如果原子向量的上次运行为零,我只想计算上次运行的连续零个数。

例如:

a <- c(1, 0, 0, 0)

因此,上次运行的连续零数为3。

如果最后一次运行不为零,则答案必须为零。例如
a <- c(0, 1, 1, 0, 0, 1)

因此,答案为零,因为在上一次运行中,结果为1,而不是零。

我不想使用任何外部包装。我设法编写了一个使用循环的函数。但是我认为必须存在更有效的方法。

    czero <- function(a) {
      k = 0
      for(i in 1:length(a)){
        if(a[i] == 0) {
          k = k + 1
        } else k = 0
      }
      return(k)
    }

最佳答案

反转a,然后计算其累计和。前导0将是剩下的唯一0,并且!其中每个元素均为TRUE,其他元素为FALSE。其总和是所需的数字。

sum(!cumsum(rev(a)))

关于r - 如何计算上次运行中的连续零?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57980708/

10-12 02:16