【问题标题】:counting numbers between two zeros计算两个零之间的数字
【发布时间】:2014-01-28 02:21:48
【问题描述】:

假设我有一个向量,比如说:

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)

我想获得一个向量,它将落在两个零之间的值相加,即输出应如下所示:

y = c(1,2,4,1,1,1)

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

我尝试使用零索引的游程。

提前致谢

【问题讨论】:

  • 你是在找人帮你改剧本吗?
  • 不应该是y = (1,2,4,2,1,1,1,1)吗?否则,我会错过你想要做的事情。
  • 你应该包括一个你已经尝试过的例子,以及为什么这不起作用。
  • 应该将0101010 分组为010 1 01001 010 10 -- 为什么?
  • @MatthewLundberg,第一个提供的示例表明集群是在您从左到右阅读时创建的。所以你的例子的答案是c(1, 1)

标签: r


【解决方案1】:
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)

如果您想保留在基本包中,可以使用gregexprregmatches

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

【讨论】:

  • 不错。 Stringr 也是我的第一个停靠港。
  • 你明白了!谢谢。
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多