[R] consecutive n values
Berry, Charles
ccberry @end|ng |rom he@|th@uc@d@edu
Thu Jun 4 19:27:52 CEST 2020
Catalin,
> On Jun 4, 2020, at 6:06 AM, Catalin Roibu <catalinroibu using 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
More information about the R-help
mailing list