【发布时间】:2015-10-16 03:25:38
【问题描述】:
我有以下向量,data。
data <- c(1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,0)
当数字 1 连续出现至少 3 次时,我想将其计为 1。 所以上面需要的输出是2。
【问题讨论】:
标签: r
我有以下向量,data。
data <- c(1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,0)
当数字 1 连续出现至少 3 次时,我想将其计为 1。 所以上面需要的输出是2。
【问题讨论】:
标签: r
您可以使用rle()
with(rle(data), sum(lengths >= 3 & values == 1))
# [1] 2
【讨论】:
另一个选项是rleid 来自data.table
library(data.table)#v1.9.6+
sum(table(rleid(data),data)[,2]>=3)
#[1] 2
【讨论】:
stringi的解决方案:
library(stringi)
stri_count(paste(data, collapse=''), regex='1{3,}')
#[1] 2
stringr 完成了这项工作,但似乎速度较慢:
library(stringr)
str_count(paste(data, collapse=''), '1{3,}')
#[1] 2
你也可以试试这个基础R 方法:
length(strsplit(gsub('1{3,}', 'a', paste(data, collapse='')), 'a')[[1]]) - 1
#[1] 2
【讨论】: