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.

Reply via email to