【发布时间】:2022-01-24 14:54:26
【问题描述】:
我正在尝试匹配/链接 2 个数据集,每个数据集都有一个纬度。我想为第一个数据集中的每个给定坐标按距离生成最接近的 n 个匹配项。我能够得到最接近的匹配,但不知道如何扩展它以获得 n 个匹配。
数据集看起来像这样- table_1
| id_1 | lat_1 | lon_ |
|---|---|---|
| a1 | 50.8613159 | 1.2483 |
| d7 | 50.8526967 | 1.2566349 |
| s2 | 50.8666 | 1.2433232 |
table_2
| id_2 | lat_2 | lon_2 |
|---|---|---|
| x2 | 50.8713562548622 | 1.24447448004003 |
| r1 | 50.8548464 | 1.2402125971721 |
| o9 | 50.87906755026 | 1.2453153747299 |
我用来确定最接近匹配的代码是从 RANN 包中找到欧几里得分布。
table_1[, c(3, 4)] <- as.data.frame(RANN::nn2(table_1[, c("lat_1", "lon_1")],
table_2[, c("lat_2", "lon_2")], k=1))
返回一个索引号和距离。理想情况下,我希望我的输出看起来像-
对于 3 个最接近的匹配项:
| id_1 | lat_1 | lon_1 | index_no |
|---|---|---|---|
| a1 | 50.8613159 | 1.2483 | 3 |
| a1 | 50.8613159 | 1.2483 | 2 |
| a1 | 50.8613159 | 1.2483 | 1 |
其中最后一列 index_no 提供了 table_2 中最近坐标的索引号,并填充 id_1 3 次以提供以 km 或 m 为单位的 dist 以任意顺序提供的 3 个最接近的匹配项。
【问题讨论】:
-
你试过把 k 改成 3 吗?
标签: r gis geospatial