Here is an example of how you might do it. It uses a technique of counting how many items are in a queue based on their arrival times; it can be used to also find areas of overlap.
Note that it would be best to use a list for the 's' end points ================================ > # note the next statement removes names of the format 's[0-9]+_rng' > # it would be best to create a list with the 's' endpoints, but this is > # what the OP specified > > rm(list = grep('s[0-9]+_rng', ls(), value = TRUE)) # Danger Will Robinson!! > > # ex 1 > x_rng = c(-100,100) > > s1_rng = c(-25.5,30) > s2_rng = c(0.77,10) > s3_rng = c(25,35) > s4_rng = c(70,80.3) > s5_rng = c(90,95) > > # ex 2 > # x_rng = c(-50.5,100) > > # s1_rng = c(-75.3,30) > > # ex 3 > # x_rng = c(-75.3,30) > > # s1_rng = c(-50.5,100) > > # ex 4 > # x_rng = c(-100,100) > > # s1_rng = c(-105,105) > > # find all the names -- USE A LIST NEXT TIME > sNames <- grep("s[0-9]+_rng", ls(), value = TRUE) > > # initial matrix with the 'x' endpoints > queue <- rbind(c(x_rng[1], 1), c(x_rng[2], 1)) > > # add the 's' end points to the list > # this will be used to determine how many things are in a queue (or areas that > # overlap) > for (i in sNames){ + queue <- rbind(queue + , c(get(i)[1], 1) # enter queue + , c(get(i)[2], -1) # exit queue + ) + } > queue <- queue[order(queue[, 1]), ] # sort > queue <- cbind(queue, cumsum(queue[, 2])) # of people in the queue > print(queue) [,1] [,2] [,3] [1,] -100.00 1 1 [2,] -25.50 1 2 [3,] 0.77 1 3 [4,] 10.00 -1 2 [5,] 25.00 1 3 [6,] 30.00 -1 2 [7,] 35.00 -1 1 [8,] 70.00 1 2 [9,] 80.30 -1 1 [10,] 90.00 1 2 [11,] 95.00 -1 1 [12,] 100.00 1 2 > > # print out values where the last column is 1 > for (i in which(queue[, 3] == 1)){ + cat("start:", queue[i, 1L], ' end:', queue[i + 1L, 1L], "\n") + } start: -100 end: -25.5 start: 35 end: 70 start: 80.3 end: 90 start: 95 end: 100 > > ========================================= On Sat, May 12, 2012 at 1:54 PM, Ben quant <ccqu...@gmail.com> wrote: > Hello, > > I'm posting this again (with some small edits). I didn't get any replies > last time...hoping for some this time. :) > > Currently I'm only coming up with brute force solutions to this issue > (loops). I'm wondering if anyone has a better way to do this. Thank you for > your help in advance! > > The problem: I have endpoints of one x range (x_rng) and an unknown number > of s ranges (s[#]_rng) also defined by the range endpoints. I'd like to > remove the x ranges that overlap with the s ranges. The examples below > demonstrate what I mean. > > What is the best way to do this? > > Ex 1. > For: > x_rng = c(-100,100) > > s1_rng = c(-25.5,30) > s2_rng = c(0.77,10) > s3_rng = c(25,35) > s4_rng = c(70,80.3) > s5_rng = c(90,95) > > I would get: > -100,-25.5 > 35,70 > 80.3,90 > 95,100 > > Ex 2. > For: > x_rng = c(-50.5,100) > > s1_rng = c(-75.3,30) > > I would get: > 30,100 > > Ex 3. > For: > x_rng = c(-75.3,30) > > s1_rng = c(-50.5,100) > > I would get: > -75.3,-50.5 > > Ex 4. > For: > x_rng = c(-100,100) > > s1_rng = c(-105,105) > > I would get something like: > NA,NA > or... > NA > > Ex 5. > For: > x_rng = c(-100,100) > > s1_rng = c(-100,100) > > I would get something like: > -100,-100 > 100,100 > or just... > -100 > 100 > > PS - You may have noticed that in all of the examples I am including the s > range endpoints in the desired results, which I can deal with later in my > program so its not a problem... I think leaving in the s range endpoints > simplifies the problem. > > Thanks! > Ben > > [[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. -- Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it. ______________________________________________ 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.