Hello all, I'm not really sure how to search for this in google/Rseek so there is probably a command to do it. I also know I could write an apply loop to find it but thought I would ask all you lovely R gurus. I have a very long vector (length=1855190) it looks something like this 1111...2222...3333....etc so it would be something equivalent of doing: rep(c(1,2,3,4,5), c(10,30,24,65,3)) How can I find the index of where the step/jump is? For example using the above I would get an index of 0, 10, 40, 64, 129 Any help would be greatly appreciated. Cheers, Paul
> I have a very long vector (length=1855190) it looks something like this > > 1111...2222...3333....etc so it would be something equivalent of doing: > rep(c(1,2,3,4,5), c(10,30,24,65,3)) > > How can I find the index of where the step/jump is? For example using the above I would > get an index of 0, 10, 40, 64, 129Define 2 functions: isFirstInRun <- function(x) c(TRUE, x[-1]!=x[-length(x)]) isLastInRun <- function(x) c(x[-1]!=x[-length(x)], TRUE) and use them as > z <- rep(c(1,2,3,4,5), c(10,30,24,65,3)) > which(isLastInRun(z)) [1] 10 40 64 129 132 > which(isFirstInRun(z)) [1] 1 11 41 65 130 (0 is not a valid R index into a vector, so I prefer one of the above results, but you can fiddle with the endpoints as you wish.) Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf > Of Benton, Paul > Sent: Friday, October 18, 2013 5:18 PM > To: r-help at r-project.org > Subject: [R] find jumps in vector of repeats > > Hello all, > > I'm not really sure how to search for this in google/Rseek so there is probably a > command to do it. I also know I could write an apply loop to find it but thought I would > ask all you lovely R gurus. > > I have a very long vector (length=1855190) it looks something like this > > 1111...2222...3333....etc so it would be something equivalent of doing: > rep(c(1,2,3,4,5), c(10,30,24,65,3)) > > How can I find the index of where the step/jump is? For example using the above I would > get an index of 0, 10, 40, 64, 129 > > Any help would be greatly appreciated. > > Cheers, > > Paul > ______________________________________________ > R-help at r-project.org mailing list > 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.
Hint: ?diff -- Bert On Fri, Oct 18, 2013 at 5:17 PM, Benton, Paul <hpaul.benton08 at imperial.ac.uk> wrote:> Hello all, > > I'm not really sure how to search for this in google/Rseek so there is probably a command to do it. I also know I could write an apply loop to find it but thought I would ask all you lovely R gurus. > > I have a very long vector (length=1855190) it looks something like this > > 1111...2222...3333....etc so it would be something equivalent of doing: > rep(c(1,2,3,4,5), c(10,30,24,65,3)) > > How can I find the index of where the step/jump is? For example using the above I would get an index of 0, 10, 40, 64, 129 > > Any help would be greatly appreciated. > > Cheers, > > Paul > ______________________________________________ > R-help at r-project.org mailing list > 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.-- Bert Gunter Genentech Nonclinical Biostatistics (650) 467-7374
On 19-10-2013, at 02:17, "Benton, Paul" <hpaul.benton08 at imperial.ac.uk> wrote:> Hello all, > > I'm not really sure how to search for this in google/Rseek so there is probably a command to do it. I also know I could write an apply loop to find it but thought I would ask all you lovely R gurus. > > I have a very long vector (length=1855190) it looks something like this > > 1111...2222...3333....etc so it would be something equivalent of doing: > rep(c(1,2,3,4,5), c(10,30,24,65,3)) > > How can I find the index of where the step/jump is? For example using the above I would get an index of 0, 10, 40, 64, 129 > > Any help would be greatly appreciated.z <- rep(c(1,2,3,4,5), c(10,30,24,65,3)) cumsum(rle(z)$lengths) Berend