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
相关产品推荐
相关产品推荐

