【发布时间】:2017-10-26 12:50:49
【问题描述】:
我有以下数据集:
id x y age
1 1745353 930284.1 30
2 1745317 930343.4 23
3 1745201 930433.9 10
4 1745351 930309.4 5
5 1745342 930335.2 2
6 1746619 929969.7 66
7 1746465 929827.1 7
8 1746731 928779.5 55
9 1746629 929902.6 26
10 1745938 928923.2 22
我想根据从给定 (x,y) 计算的距离为每个 id 找到 5 个最近的邻居。最终输出应如下所示:
id n_id dist age age_n_id
1 2 2 30 23
1 5 1.5 30 2
1 3 5 30 10
1 7 3 30 7
1 8 3 30 55
2 1 6 23 30
2 10 1 23 22
2 6 2 23 66
2 7 6 23 7
2 8 9 23 55
3 2 1 10 23
3 1 2 10 30
3 4 1.2 10 5
3 6 1.6 10 66
3 9 2.3 10 26
................................
................................
10 2 1.9 22 23
10 6 2.3 22 66
10 9 2.1 22 26
10 1 2.5 22 30
10 5 1.6 22 2
其中n_id是邻居的id,dist是id和n_id的直线距离,age是id的年龄,age_n_id是n_id的年龄。此外,最大距离为 10 公里。如果 10km 内的邻居少于 5 个,比如 3 个邻居,则对应的 id 只会重复 3 次。
我在 r 编程方面相对较新,任何帮助将不胜感激。
【问题讨论】:
-
dist中的值是真实的吗?我计算了ID 1和ID 2之间的距离,它是69.37。另外,坐标的长度单位是什么? -
在发布我自己的问题之前,我查看了帖子中的解决方案。 stackoverflow.com/questions/23449726/… 有效但耗时。如果可能的话,我正在寻找一个有效的解决方案(不创建 n x n 距离矩阵)。
标签: r knn nearest-neighbor euclidean-distance sp