确定指定长度的运行次数

时间:2015-10-16 03:25:39

标签: 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.

3 个答案:

答案 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