On 19 May 2004 at 13:26, Ravi Varadhan wrote:
> Hi:
>
> Suppose I have the following vector:
>
> > x <- c(1,4:8,11,13:14,17,19,23:28,35:38)
> > x
> [1] 1 4 5 6 7 8 11 13 14 17 19 23 24 25 26 27 28 35 36 37 38 >
>
>
> and I would like to pick out the first and last indices of all the
> consecutive "runs" of integers, where the length of a run is no
> smaller than a specified value, say, nmin. That is, in the above
> example, for nmin=4, I would like to get the following 3 by 2 matrix:
>
> 4 8
> 23 28
> 35 38
>
> For nmin=5, I would get the following 2 by 2 matrix
>
> 4 8
> 23 28
>
> and for nmin=6, I would get the following 1 by 2 matrix
>
> 23 28
>
> Is there an efficient and elegant way to do this?
Hallo
not complete maybe not ellegant but
y<-rle(diff(x))
res1<-x[(cumsum(y$length))[y$length>1]]+1
res2<-res1-y$length[y$length>1]
gives you the numbers you want in two vectors (res1, res2). Than you can do
any formating and selection you want.
Cheers
Petr
>
> Thanks very much for any help/suggestions.
> Ravi.
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
Petr Pikal
petr.pikal at precheza.cz