Hello List, I am having trouble finding the command for my problem. I have two arrays x and y. now i would like to compare the values of x and y and then get the index of x which is exactly or approximately equal(+/- some value ) to the values in y. x <- runif(100,min=0,max=5) y <- runif(10,min=0,max=5) the threshold value(+/-) value can vary. for this example lets take it to be .5 I know the regular method of doing this by writing different if and for loops. But i have very big dataframe the computation time is very high for this method. can anyone please tell me if there any functions to do this. thank you for your help. -- View this message in context: http://r.789695.n4.nabble.com/equating-approximate-values-tp4157551p4157551.html Sent from the R help mailing list archive at Nabble.com.
Hi. Maybe this can help you (you can try additionally to incorporate threshold):> set.seed(1) > x<-rnorm(10,10,1) > values <- sample(1:10,10) #values that we are looking for > mat <- matrix(c(x,values),ncol=2) > > closest<-function(x,values) #function is an example from The R book(Crawley) + { + x[which(abs(x-values)==min(abs(x-values)))] + }> > apply(mat[,2,drop=FALSE],1,function(y) closest(mat[,1],y))[1] 10.183643 9.164371 9.164371 9.164371 9.164371 9.164371 9.164371 9.164371 [9] 9.164371 9.164371 On Sun, Dec 4, 2011 at 7:00 PM, vamshi999 <vamshi999@gmail.com> wrote:> Hello List, > > I am having trouble finding the command for my problem. > > I have two arrays x and y. now i would like to compare the values of x and > y > and then get the index of x which is exactly or approximately equal(+/- > some > value ) to the values in y. > x <- runif(100,min=0,max=5) > y <- runif(10,min=0,max=5) > > > the threshold value(+/-) value can vary. for this example lets take it to > be > .5 > > I know the regular method of doing this by writing different if and for > loops. But i have very big dataframe the computation time is very high for > this method. can anyone please tell me if there any functions to do this. > > thank you for your help. > > -- > View this message in context: > http://r.789695.n4.nabble.com/equating-approximate-values-tp4157551p4157551.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >[[alternative HTML version deleted]]
Not sure what to make of the fact that your x, y are of different lengths: if you mean to check all possible pairings, this is probably what you need: which(outer(x, y, "-") < threshold, arr.ind = TRUE) Michael On Sun, Dec 4, 2011 at 2:24 PM, andrija djurovic <djandrija at gmail.com> wrote:> Hi. Maybe this can help you (you can try additionally to incorporate > threshold): > >> set.seed(1) >> x<-rnorm(10,10,1) >> values <- sample(1:10,10) ?#values that we are looking for >> mat <- matrix(c(x,values),ncol=2) >> >> closest<-function(x,values) ? ?#function is an example from The R book > (Crawley) > + { > + x[which(abs(x-values)==min(abs(x-values)))] > + } >> >> apply(mat[,2,drop=FALSE],1,function(y) closest(mat[,1],y)) > ?[1] 10.183643 ?9.164371 ?9.164371 ?9.164371 ?9.164371 ?9.164371 ?9.164371 > ?9.164371 > ?[9] ?9.164371 ?9.164371 > > > On Sun, Dec 4, 2011 at 7:00 PM, vamshi999 <vamshi999 at gmail.com> wrote: > >> Hello List, >> >> I am having trouble finding the command for my problem. >> >> I have two arrays x and y. now i would like to compare the values of x and >> y >> and then get the index of x which is exactly or approximately equal(+/- >> some >> value ) to the values in y. >> ?x <- runif(100,min=0,max=5) >> ?y <- runif(10,min=0,max=5) >> >> >> the threshold value(+/-) value can vary. for this example lets take it to >> be >> .5 >> >> I know the regular method of doing this by writing different if and for >> loops. But i have very big dataframe the computation time is very high for >> this method. can anyone please tell me if there any functions to do this. >> >> thank you for your help. >> >> -- >> View this message in context: >> http://r.789695.n4.nabble.com/equating-approximate-values-tp4157551p4157551.html >> Sent from the R help mailing list archive at Nabble.com. >> >> ______________________________________________ >> 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. >> > > ? ? ? ?[[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.
My apologies: you need an abs() call as well: which(abs(outer(x, y, "-")) < threshold, arr.ind = TRUE) Michael On Sun, Dec 4, 2011 at 6:25 PM, R. Michael Weylandt <michael.weylandt at gmail.com> wrote:> Not sure what to make of the fact that your x, y are of different > lengths: if you mean to check all possible pairings, this is probably > what you need: > > which(outer(x, y, "-") < threshold, arr.ind = TRUE) > > Michael > > On Sun, Dec 4, 2011 at 2:24 PM, andrija djurovic <djandrija at gmail.com> wrote: >> Hi. Maybe this can help you (you can try additionally to incorporate >> threshold): >> >>> set.seed(1) >>> x<-rnorm(10,10,1) >>> values <- sample(1:10,10) ?#values that we are looking for >>> mat <- matrix(c(x,values),ncol=2) >>> >>> closest<-function(x,values) ? ?#function is an example from The R book >> (Crawley) >> + { >> + x[which(abs(x-values)==min(abs(x-values)))] >> + } >>> >>> apply(mat[,2,drop=FALSE],1,function(y) closest(mat[,1],y)) >> ?[1] 10.183643 ?9.164371 ?9.164371 ?9.164371 ?9.164371 ?9.164371 ?9.164371 >> ?9.164371 >> ?[9] ?9.164371 ?9.164371 >> >> >> On Sun, Dec 4, 2011 at 7:00 PM, vamshi999 <vamshi999 at gmail.com> wrote: >> >>> Hello List, >>> >>> I am having trouble finding the command for my problem. >>> >>> I have two arrays x and y. now i would like to compare the values of x and >>> y >>> and then get the index of x which is exactly or approximately equal(+/- >>> some >>> value ) to the values in y. >>> ?x <- runif(100,min=0,max=5) >>> ?y <- runif(10,min=0,max=5) >>> >>> >>> the threshold value(+/-) value can vary. for this example lets take it to >>> be >>> .5 >>> >>> I know the regular method of doing this by writing different if and for >>> loops. But i have very big dataframe the computation time is very high for >>> this method. can anyone please tell me if there any functions to do this. >>> >>> thank you for your help. >>> >>> -- >>> View this message in context: >>> http://r.789695.n4.nabble.com/equating-approximate-values-tp4157551p4157551.html >>> Sent from the R help mailing list archive at Nabble.com. >>> >>> ______________________________________________ >>> 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. >>> >> >> ? ? ? ?[[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.
this is exactly what i wanted. How to i select only the minimum value from this?. thank you My apologies: you need an abs() call as well: which(abs(outer(x, y, "-")) < threshold, arr.ind = TRUE) Michael -- View this message in context: http://r.789695.n4.nabble.com/equating-approximate-values-tp4157551p4158691.html Sent from the R help mailing list archive at Nabble.com.