【发布时间】:2015-12-13 15:38:03
【问题描述】:
我刚开始学习 R,但希望项目尽快完成。这很简单:我有一个 X 列和一个由 X 坐标和 Y 坐标组成的 Y 列。 (在 NAD27 坐标系中工作)。从第一个坐标开始,我想找到数据集中最近的点,然后移动到下一个坐标并找到它在同一数据集中的最近点。理想情况下,它将遍历每个点并确定最近的点。
point x y
1 1601774 14544454
2 1616574 14579422
3 1608698 14572922
4 1602948 14572990
5 1607355 14573871
6 1615336 14578178
7 1603398 14574495
8 1605153 14570727
9 1606758 14573845
10 1606655 14570953
【问题讨论】:
-
欢迎来到 Stack Overflow!请包括一个小样本数据集(我不熟悉 NAD27 坐标系,我认为其他人也可能如此)。进一步请包括您尝试执行此操作的任何代码。
-
sp::spDists或rgeos::gDistance应该会有所帮助,但您需要先尝试一些事情(人们不只是要编写代码) -
一个明显的方法是使用距离矩阵。不过,这可能会占用大量内存,
ds <- as.matrix(dist(dat, diag=TRUE, upper=TRUE)); diag(ds) <- Inf; apply(ds, 1, which.min)。但可能还有更聪明的方法。 -
这真的取决于程序员时间/内存/计算时间的权衡。 @bunk 关于快速和肮脏的方法是正确的。谷歌搜索“r 查找最近点”为您提供了很多选择。
sqrt(rowSums(sweep(mydata[-i,],MARGIN=1,FUN="-",mydata[i,])^2))为您提供从点i到所有其他点的所有距离... -
k-d 树也可以是一个选项:stackoverflow.com/a/30263451/3093387
标签: r coordinates spatial