Finding indices where
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