我有以下向量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.
答案 0 :(得分:6)
您可以使用rle()
with(rle(data), sum(lengths >= 3 & values == 1))
# [1] 2
答案 1 :(得分:2)
另一个选项是来自rleid
data.table
library(data.table)#v1.9.6+
sum(table(rleid(data),data)[,2]>=3)
#[1] 2
答案 2 :(得分: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