2015-10-16 3 views

ответ

6

Вы можете использовать rle()

with(rle(data), sum(lengths >= 3 & values == 1)) 
# [1] 2 
2

Другой вариант rleid от data.table

library(data.table)#v1.9.6+ 
sum(table(rleid(data),data)[,2]>=3) 
#[1] 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 
Смежные вопросы