On Wed, 27 Jan 2010, Gregory Gentlemen wrote:

Dear R-users,

Say that I have a sequence of zeroes and ones:

x <- c(1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0)

The sequences of ones represent segments and I want to report the starting and endpoints of these segments. For example, in 'x', the first segment starts at location 1 and ends at 3, and the second segment starts at location 8 and ends at location 10. Is there an efficient way of doing this in R without having to right a bunch of if-else conditions? I know the rle function will report the length of the segments but not the endpoints.

If this is more than a small one-off problem you might try this:

require(IRanges) # from BioConductor
IRanges(Rle(x)==1) # n.b. Rle != rle
IRanges of length 3
    start end width
[1]     1   3     3
[2]     8  10     3
[3]    15  17     3



HTH,

Chuck


Thanks in advance.

Gregory Gentlemen



     __________________________________________________________________
[[elided Yahoo spam]]


        [[alternative HTML version deleted]]

______________________________________________
R-help@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.


Charles C. Berry                            (858) 534-2098
                                            Dept of Family/Preventive Medicine
E mailto:cbe...@tajo.ucsd.edu               UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901

______________________________________________
R-help@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.

Reply via email to