[R] Fastest way of finding if any members of vector x fall in the range of the rows of matrix y

jim holtman jholtman at gmail.com
Tue Jun 28 01:15:14 CEST 2011


try sqldf:

> require(sqldf)
> x
  x
1 1
2 2
3 6
4 5
> y
  s  e
1 1  4
2 3  5
3 8 10
> sqldf("
+     select x.x
+         from x, y
+         where x.x between y.s and y.e
+ ")
  x
1 1
2 2
3 5
>


On Mon, Jun 27, 2011 at 5:33 AM, Salih Tuna <salihtuna at gmail.com> wrote:
> Thanks a lot. That solves the problem :)
> best,
> salih
>
> On Sat, Jun 25, 2011 at 9:13 AM, Dimitris Rizopoulos <
> d.rizopoulos at erasmusmc.nl> wrote:
>
>> yet another solution is:
>>
>>
>> v <- c(1, 2, 6, 5)
>> w <- matrix(c(1, 4, 3, 5, 8, 10), ncol = 2, byrow = TRUE)
>>
>> check <- outer(w[, 1], v, "-") * outer(w[, 2], v, "-")
>> v[which(check <= 0, arr.ind = TRUE)[, 2]]
>>
>>
>> Best,
>> Dimitris
>>
>>
>>
>> On 6/24/2011 10:05 PM, Martin Morgan wrote:
>>
>>> On 06/24/2011 11:12 AM, Dennis Murphy wrote:
>>>
>>>> Hi:
>>>>
>>>> Not much different from Peter's approach, but here's another try:
>>>>
>>>> v<- c(1, 2, 6, 5)
>>>> w<- matrix(c(1, 4, 3, 5, 8, 10), ncol = 2, byrow = TRUE)
>>>>
>>>>> w
>>>>>
>>>> [,1] [,2]
>>>> [1,] 1 4
>>>> [2,] 3 5
>>>> [3,] 8 10
>>>>
>>>>
>>>> f<- function(x) v[which(v>= x[1]& v<= x[2])]
>>>> unlist(apply(w, 1, f))
>>>> [1] 1 2 5
>>>>
>>>> If you just do the apply() part, the function will return a list of
>>>> those elements of v that fall within the i-th interval.
>>>>
>>>
>>> Maybe
>>>
>>>  > v = c(1, 2, 6, 5)
>>>  > start = c(-Inf, 1, 3, 8)
>>>  > end = c(-Inf, 4, 5, 10)
>>>  > v[ v <= end[findInterval(v, start)] ]
>>>
>>> Also IRanges::findOverlaps / countOverlaps in Bioconductor
>>>
>>> v[countOverlaps(IRanges(v, v), IRanges(start, end)) != 0]
>>>
>>> http://bioconductor.org/**install <http://bioconductor.org/install>
>>>
>>> Martin
>>>
>>>
>>>> HTH,
>>>> Dennis
>>>>
>>>> On Fri, Jun 24, 2011 at 9:52 AM, Salih Tuna<salihtuna at gmail.com> wrote:
>>>>
>>>>> Hi guys,
>>>>>
>>>>> let's assume i have the following
>>>>>
>>>>> 1
>>>>> x = 2
>>>>> 6
>>>>> 5
>>>>>
>>>>> 1 4
>>>>> y = 3 5
>>>>> 8 10
>>>>>
>>>>> i want the code to report back 1, 2 and 5 from x.
>>>>> Basically it shopuld check whether each elements of x falls in the
>>>>> range of
>>>>> each row of x. 1 and 2 falls in between 1-4 and 5 falls in between 3-5.
>>>>> I do this with two for loops but in the case of very large list, it
>>>>> takes
>>>>> ages.
>>>>>
>>>>> best,
>>>>> salih
>>>>>
>>>>>
>>>>> On Fri, Jun 24, 2011 at 4:12 PM, Dennis Murphy<djmuser at gmail.com>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>> Hi:
>>>>>>
>>>>>> That leaves open several possibilities. Could you please supply a
>>>>>> small, reproducible example (i.e., one that someone can copy and paste
>>>>>> into an R session) that illustrates the problem along with the
>>>>>> solution you expect?
>>>>>>
>>>>>> TIA,
>>>>>> Dennis
>>>>>>
>>>>>> On Fri, Jun 24, 2011 at 2:30 AM, Salih Tuna<salihtuna at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Dimitris,
>>>>>>> Thanks for your reply. But this is not exactly what i am after. I want
>>>>>>> to
>>>>>>> find the probes that falls into certain regions. In your solution it
>>>>>>> will
>>>>>>> ignore the second probe if it falls into the same region as the first
>>>>>>> one.
>>>>>>> Is there any vector trickb uilt in R to find whether probes fall into
>>>>>>> certain regions?
>>>>>>> best,
>>>>>>> salih
>>>>>>>
>>>>>>> On Fri, Jun 24, 2011 at 10:23 AM, Dimitris Rizopoulos<
>>>>>>> d.rizopoulos at erasmusmc.nl> wrote:
>>>>>>>
>>>>>>> One approach is the following:
>>>>>>>>
>>>>>>>> x<- rnorm(5)
>>>>>>>> y<- matrix(rnorm(5*2), 5, 2)
>>>>>>>>
>>>>>>>> check<- y - x
>>>>>>>> check[, 1] * check[, 2]< 0
>>>>>>>>
>>>>>>>>
>>>>>>>> I hope it helps.
>>>>>>>>
>>>>>>>> Best,
>>>>>>>> Dimitris
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 6/24/2011 10:57 AM, Salih Tuna wrote:
>>>>>>>>
>>>>>>>> Hi All,
>>>>>>>>> What is the fastest way of finding if any members of vector x
>>>>>>>>> fall in
>>>>>>>>> the
>>>>>>>>> range of the rows of matrix y?
>>>>>>>>> I do not want to use two for loops as this will take forever.
>>>>>>>>> Any help will be appreciated,
>>>>>>>>> best,
>>>>>>>>> salih
>>>>>>>>>
>>>>>>>>> [[alternative HTML version deleted]]
>>>>>>>>>
>>>>>>>>> ______________________________****________________
>>>>>>>>> R-help at r-project.org mailing list
>>>>>>>>>
>>>>>>>>> https://stat.ethz.ch/mailman/****listinfo/r-help<https://stat.ethz.ch/mailman/**listinfo/r-help>
>>>>>>>>> <https://stat.**ethz.ch/mailman/listinfo/r-**help<https://stat.ethz.ch/mailman/listinfo/r-help>
>>>>>>>>> >
>>>>>>>>>
>>>>>>>>> PLEASE do read the posting guide http://www.R-project.org/**<http://www.r-project.org/**>
>>>>>>>>> posting-guide.html<http://www.**r-project.org/posting-guide.**html<http://www.r-project.org/posting-guide.html>
>>>>>>>>> >
>>>>>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>> Dimitris Rizopoulos
>>>>>>>> Assistant Professor
>>>>>>>> Department of Biostatistics
>>>>>>>> Erasmus University Medical Center
>>>>>>>>
>>>>>>>> Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
>>>>>>>> Tel: +31/(0)10/7043478
>>>>>>>> Fax: +31/(0)10/7043014
>>>>>>>> Web:
>>>>>>>> http://www.erasmusmc.nl/****biostatistiek/<http://www.erasmusmc.nl/**biostatistiek/>
>>>>>>>> <http://www.**erasmusmc.nl/biostatistiek/<http://www.erasmusmc.nl/biostatistiek/>
>>>>>>>> >
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> [[alternative HTML version deleted]]
>>>>>>>
>>>>>>> ______________________________**________________
>>>>>>> R-help at r-project.org mailing list
>>>>>>> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help>
>>>>>>> PLEASE do read the posting guide
>>>>>>> http://www.R-project.org/**posting-guide.html<http://www.r-project.org/posting-guide.html>
>>>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>> ______________________________**________________
>>>> R-help at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help>
>>>> PLEASE do read the posting guide
>>>> http://www.R-project.org/**posting-guide.html<http://www.r-project.org/posting-guide.html>
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>
>>>
>>>
>>>
>> --
>> Dimitris Rizopoulos
>> Assistant Professor
>> Department of Biostatistics
>> Erasmus University Medical Center
>>
>> Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
>> Tel: +31/(0)10/7043478
>> Fax: +31/(0)10/7043014
>> Web: http://www.erasmusmc.nl/**biostatistiek/<http://www.erasmusmc.nl/biostatistiek/>
>>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?



More information about the R-help mailing list