Skip to content

Distances between two datasets of x and y co-ordinates

3 messages · Andrew McFadden, Sundar Dorai-Raj, Bill Venables

#
Andrew McFadden said the following on 3/12/2008 1:47 PM:
If you're trying to find only the closest point in data1 to data2, then 
use knn (or knn1) in the 'class' package:

library(class)
nn <- knn1(data2, data1, 1:nrow(data2))

which gives you the rows in data1 closest to each row in data2. Then 
compute the distance:

rowSums((data2[nn, ] - data1)^2)^0.5

HTH,

--sundar
#
Here's what I would try.  Suppose x1, y1 and x2, y2 are the two data
sets.

z1 <- complex(real = x1, imaginary = y1)
z2 <- complex(real = x2, imaginary = y2)
dMat <- outer(z1, z2, function(z1, z2) Mod(z1-z2))

Bill Venables
CSIRO Laboratories
PO Box 120, Cleveland, 4163
AUSTRALIA
Office Phone (email preferred): +61 7 3826 7251
Fax (if absolutely necessary):  +61 7 3826 7304
Mobile:                         +61 4 8819 4402
Home Phone:                     +61 7 3286 7700
mailto:Bill.Venables at csiro.au
http://www.cmis.csiro.au/bill.venables/ 

-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
On Behalf Of Andrew McFadden
Sent: Thursday, 13 March 2008 6:47 AM
To: r-help at r-project.org
Subject: [R] Distances between two datasets of x and y co-ordinates


Hi all

I am trying to determine the distances between  two datasets of x and y
points. The number of points in dataset One is very small i.e. perhaps
5-10. The number of points in dataset Two is likely to be very large
i.e. 20,000-30,000. My initial approach was to append the first dataset
to the second and then carry out the calculation:

dists <- as.matrix(dist(gis data from 2 * datasets)) 

However, the memory of the computer is not sufficient. A lot of
calculations carried out in this situation are unnecessary as I only
want approx 5 * 20,000 calculations versus 20,000 *20,000. 

x <- c(2660156,2663703,2658165,2659303,2661531,2660914)
y <- c(6476767,6475013,6475487,6479659,6477004,6476388)
data2<-cbind(x,y)

x <- c(266500,2611111)
y <- c(6478767,6485013)
data1<-cbind(x,y)

Any suggestions on how to do this would be appreciated.

Regards

Andrew

Phone 04 894 5600 Fax 04 894 4973 Mobile 029 894 5611 Postal address: 
Investigation and Diagnostic Centre- Wallaceville Box 40742 Ward St 
Upper Hutt



########################################################################
This email message and any attachment(s) is intended solely for the
addressee(s) named above. The information it contains is confidential
and may be legally privileged.  Unauthorised use of the message, or the
information it contains, may be unlawful. If you have received this
message by mistake please call the sender immediately on 64 4 8940100
or notify us by return email and erase the original message and
attachments. Thank you.

The Ministry of Agriculture and Forestry accepts no responsibility for
changes made to this email or to any attachments after transmission from
the office.
########################################################################


______________________________________________
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.