计算两个零之间的数字

use*_*725 0 r

假设我有一个向量,说:

x <- c(1, 0, 1, 0, 0, 0, 1, 1, 0, 0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,1,0)
Run Code Online (Sandbox Code Playgroud)

我想获得一个向两个零之间的值求和的向量,即输出应如下所示:

y = c(1,2,4,1,1,1)
Run Code Online (Sandbox Code Playgroud)

请注意,所有的应该在开头为零,在结尾为零,否则将不计算.所以字符串01010只产生1.

我试图使用索引为零的运行长度.

提前致谢

flo*_*del 5

sum.between.zeroes <- function(x) {
  library(stringr)
  x.str <- paste(x, collapse = "")
  nchar(str_extract_all(x.str, "01+0")[[1]]) - 2L
}

sum.between.zeroes(c(1,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,1,0))
# [1] 1 2 4 1 1 1

sum.between.zeroes(c(0,1,0,1,0))
# [1] 1

sum.between.zeroes(c(1,1))
# integer(0)
Run Code Online (Sandbox Code Playgroud)

如果要保留在基本包中,可以使用gregexprregmatches:

sum.between.zeroes <- function(x) {
  x.str <- paste(x, collapse = "")
  nchar(regmatches(x.str, gregexpr("01+0", x.str))[[1]]) - 2L
}
Run Code Online (Sandbox Code Playgroud)