You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言计算两组经纬度坐标最近距离时如何保留对应数据集ID?

解决方法

你已有的代码中已经计算得到了匹配用的行索引向量i,只需新增一行代码通过该索引提取data1的id字段赋值到data2即可实现需求。

修改后完整代码

library(gdistance)
library(geosphere)
d <- pointDistance(data1[,1:2],data2[,4:3], lonlat=TRUE, allpairs=T)
i <- apply(d, 1, which.min)
data2$distance_mpro = d[cbind(1:nrow(d), i)]
# 新增以下行即可匹配对应id
data2$id = data1$id[i]

补充优化建议

建议提取坐标时使用列名替代列索引,避免后续数据列顺序调整后出现坐标匹配错误的问题,优化后的坐标提取写法如下:

# 明确指定经纬度列,代码稳定性更高
d <- pointDistance(data1[,c("Longitude", "Latitude")],
                   data2[,c("longitude_exetat", "latitude_exetat")],
                   lonlat=TRUE, allpairs=T)

如果你的实际需求是为每个data2坐标匹配最近的data1坐标,仅需要调整apply的遍历维度即可,对应代码如下:

d <- pointDistance(data1[,c("Longitude", "Latitude")],
                   data2[,c("longitude_exetat", "latitude_exetat")],
                   lonlat=TRUE, allpairs=T)
# 按矩阵列遍历,即每个data2点找最近的data1点
i <- apply(d, 2, which.min)
data2$distance_mpro = d[cbind(i, 1:ncol(d))]
data2$id = data1$id[i]

内容的提问来源于stack exchange,提问作者Coralie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:06:03