Hi!
I have a problem of finding a specific value in a column. For example, I
have a matrix with say 2 columns
X Y
1 -2.0341602 9.036689e-05
2 -1.4287230 1.807338e-04
3 -1.1194402 2.711007e-04
4 -1.0327582 3.614676e-04
5 -0.8130556 4.518344e-04
6 -0.7138212 5.422013e-04
7 -0.6634425 6.325682e-04
8 -0.6512083 7.229351e-04
9 -0.6176286 8.133020e-04
10 -0.5897241 9.036689e-04
Now if I have some value of x=-0.6523. I need to find a value in the X
column that is the closest to my value of x then read off the row number
and then take the corresponding value in column Y. What I am not sure is
how to do the first search where I would search by decimal places and take
the smallest absolute distance between the numbers. For example if he finds
the first value which is correct in this case - and then 0 and then 6 and
then 5 but now there is no 2 for that specific decimal place so he would
calculate the distance between the one before and the one after and see
which one is smaller. For that which is smaller would be the final X value.
Can someone please give me a hint on how to proceed. Thanks.
search algorithm
5 messages · Ita.Cirovic-Donev@hypo-alpe-adria.com, Dimitris Rizopoulos, James Muller +1 more
maybe something like this could be of help: mat <- matrix(rnorm(20), 10, 2) val <- -0.6523 ################### ind <- which.min(abs(mat[, 1] - val)) mat mat[ind, ] Best, Dimitris ---- Dimitris Rizopoulos Ph.D. Student Biostatistical Centre School of Public Health Catholic University of Leuven Address: Kapucijnenvoer 35, Leuven, Belgium Tel: +32/(0)16/336899 Fax: +32/(0)16/337015 Web: http://www.med.kuleuven.be/biostat/ http://www.student.kuleuven.be/~m0390867/dimitris.htm ----- Original Message ----- From: <Ita.Cirovic-Donev at hypo-alpe-adria.com> To: <r-help at stat.math.ethz.ch> Sent: Monday, February 13, 2006 1:30 PM Subject: [R] search algorithm
Hi!
I have a problem of finding a specific value in a column. For
example, I
have a matrix with say 2 columns
X Y
1 -2.0341602 9.036689e-05
2 -1.4287230 1.807338e-04
3 -1.1194402 2.711007e-04
4 -1.0327582 3.614676e-04
5 -0.8130556 4.518344e-04
6 -0.7138212 5.422013e-04
7 -0.6634425 6.325682e-04
8 -0.6512083 7.229351e-04
9 -0.6176286 8.133020e-04
10 -0.5897241 9.036689e-04
Now if I have some value of x=-0.6523. I need to find a value in the
X
column that is the closest to my value of x then read off the row
number
and then take the corresponding value in column Y. What I am not
sure is
how to do the first search where I would search by decimal places
and take
the smallest absolute distance between the numbers. For example if
he finds
the first value which is correct in this case - and then 0 and then
6 and
then 5 but now there is no 2 for that specific decimal place so he
would
calculate the distance between the one before and the one after and
see
which one is smaller. For that which is smaller would be the final X
value.
Can someone please give me a hint on how to proceed. Thanks.
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
Hi,
I'm not sure how much weight you're putting on efficiency for your
algorithm, but that sounds unnecessarily complicated. If your matrices
are not too big then maybe something like this would work. Let your
matrix be M and your value be a, then
yoursearch <- function(M, a) {
# generate abs dist vector
dist <- abs(M[,"X"]-a)
# which element is min dist
argmin <- which.min(dist)
# return corresponding Y value
M[argmin,"Y"]
}
There are so many ways to do this faster (google for search algorithms
if you feel so inclined), but I think simplicity is good unless you
have enormous matrices or need to do it a very large number of times.
Anyway, hope this helps
James
On Mon, Feb 13, 2006 at 01:30:21PM +0100, Ita.Cirovic-Donev at hypo-alpe-adria.com wrote:
I have a problem of finding a specific value in a column. For example, I have a matrix with say 2 columns Now if I have some value of x=-0.6523. I need to find a value in the X column that is the closest to my value of x then read off the row number and then take the corresponding value in column Y. What I am not sure is how to do the first search where I would search by decimal places and take the smallest absolute distance between the numbers. For example if he finds the first value which is correct in this case - and then 0 and then 6 and then 5 but now there is no 2 for that specific decimal place so he would calculate the distance between the one before and the one after and see which one is smaller. For that which is smaller would be the final X value. Can someone please give me a hint on how to proceed. Thanks.
There is a function in the Hmisc package that will help. Example:
require(Hmisc) x <- sort(runif(10)) x
[1] 0.1225542 0.1620869 0.2197772 0.3187375 0.5498879 0.5644445 0.5812717 0.7380532 0.8187384 0.9063713
whichClosest(x,.41)
[1] 4
x[4]
[1] 0.3187375
Or for your matrix (yourmat), this should work (but I haven't tested it)
yourmat[ whichClosest(yourmat[,'X'] , -0.6523) , 'Y']
-Don
At 1:30 PM +0100 2/13/06, Ita.Cirovic-Donev at hypo-alpe-adria.com wrote:
Hi!
I have a problem of finding a specific value in a column. For example, I
have a matrix with say 2 columns
X Y
1 -2.0341602 9.036689e-05
2 -1.4287230 1.807338e-04
3 -1.1194402 2.711007e-04
4 -1.0327582 3.614676e-04
5 -0.8130556 4.518344e-04
6 -0.7138212 5.422013e-04
7 -0.6634425 6.325682e-04
8 -0.6512083 7.229351e-04
9 -0.6176286 8.133020e-04
10 -0.5897241 9.036689e-04
Now if I have some value of x=-0.6523. I need to find a value in the X
column that is the closest to my value of x then read off the row number
and then take the corresponding value in column Y. What I am not sure is
how to do the first search where I would search by decimal places and take
the smallest absolute distance between the numbers. For example if he finds
the first value which is correct in this case - and then 0 and then 6 and
then 5 but now there is no 2 for that specific decimal place so he would
calculate the distance between the one before and the one after and see
which one is smaller. For that which is smaller would be the final X value.
Can someone please give me a hint on how to proceed. Thanks.
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
-------------------------------------- Don MacQueen Environmental Protection Department Lawrence Livermore National Laboratory Livermore, CA, USA
thanks a lot for the help. I tried some stuff and now it works.
____________________
Ita Cirovic-Donev
Risk Controlling
HYPO ALPE-ADRIA-BANK D.D.
Amruseva 6, HR-10000 Zagreb
Phone: +385 1 4899 269
Fax: +385 1 6063 344
E-Mail: ita.cirovic-donev at hypo-alpe-adria.com
Web: www.hypo-alpe-adria.hr
Don MacQueen
<macq at llnl.gov>
To
13.02.2006 16:38 Ita.Cirovic-Donev at hypo-alpe-adri
a.com, r-help at stat.math.ethz.ch
cc
Subject
Re: [R] search algorithm
Importance
There is a function in the Hmisc package that will help.
Example:
require(Hmisc) x <- sort(runif(10)) x
[1] 0.1225542 0.1620869 0.2197772 0.3187375 0.5498879 0.5644445 0.5812717 0.7380532 0.8187384 0.9063713
whichClosest(x,.41)
[1] 4
x[4]
[1] 0.3187375
Or for your matrix (yourmat), this should work (but I haven't tested it)
yourmat[ whichClosest(yourmat[,'X'] , -0.6523) , 'Y']
-Don
At 1:30 PM +0100 2/13/06, Ita.Cirovic-Donev at hypo-alpe-adria.com wrote:
Hi!
I have a problem of finding a specific value in a column. For example, I
have a matrix with say 2 columns
X Y
1 -2.0341602 9.036689e-05
2 -1.4287230 1.807338e-04
3 -1.1194402 2.711007e-04
4 -1.0327582 3.614676e-04
5 -0.8130556 4.518344e-04
6 -0.7138212 5.422013e-04
7 -0.6634425 6.325682e-04
8 -0.6512083 7.229351e-04
9 -0.6176286 8.133020e-04
10 -0.5897241 9.036689e-04
Now if I have some value of x=-0.6523. I need to find a value in the X
column that is the closest to my value of x then read off the row number
and then take the corresponding value in column Y. What I am not sure is
how to do the first search where I would search by decimal places and take
the smallest absolute distance between the numbers. For example if he
finds
the first value which is correct in this case - and then 0 and then 6 and then 5 but now there is no 2 for that specific decimal place so he would calculate the distance between the one before and the one after and see which one is smaller. For that which is smaller would be the final X
value.
Can someone please give me a hint on how to proceed. Thanks.
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide!
http://www.R-project.org/posting-guide.html -- -------------------------------------- Don MacQueen Environmental Protection Department Lawrence Livermore National Laboratory Livermore, CA, USA