Catalin, > On Jun 4, 2020, at 6:06 AM, Catalin Roibu <catalinro...@gmail.com> wrote: > > Dear R users, > > Please help me to detect consecutive n values in R and their interval. > > > rle.seq1<-rle(reco$extr) > cbind(rle.seq1$values) > index<-any(rle.seq1$values=="DRY"&rle.seq1$lengths>=3) > cumsum(rle.seq1$lengths)[index] > > reco is a data frame with 2 columns (year and values (DRY, WET). > > I want to have something like this: > 1799-1800 - WET - 2 > 1803-1805 - WET - 3 > > Thank you very much!
Something like: wd.rle <- rle(reco$extr) is.wet <- wd.rle[["values"]]=="WET" wd.rle[["values"]] <- ifelse(is.wet, cumsum( is.wet ), 0) wet.list <- split( reco$year, inverse.rle( wd.rle ) )[ -1 ] sapply( wet.list[ lengths(wet.list) > 1 ], range) should get you started. The last line returns: : 2 3 6 7 8 12 15 20 21 23 : [1,] 1799 1803 1822 1829 1843 1880 1911 1969 1974 1988 : [2,] 1800 1805 1825 1832 1844 1881 1914 1970 1975 1990 You can use `apply' to further process this to get the desired format for your result. I assume here that reco$years are in groups of consecutive 'WET' years. If there are gaps or other oddities you will need to replace `range' with a function that handles that. HTH, Chuck ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.