验证R语言计算数据框行间最小地理距离代码的正确性
代码正确性确认
你的代码完全正确实现了需求,具体分析如下:
核心逻辑验证
- 距离计算:通过嵌套循环遍历
df_1与df_2的所有人员配对,调用distHaversine计算哈维正弦距离(单位为米)并存储到矩阵中,覆盖了所有可能的组合,参数传递符合函数要求,无遗漏或错误。 - 最近对象匹配:用
apply(distances, 1, which.min)逐行找出df_2中距离最近的人员索引,再通过索引精准提取对应的姓名、经纬度及距离值,最终构建的final数据框完全符合你要求的结构。 - 结果合理性:输出结果中每个
df_1人员都匹配到了df_2的对应人员,距离数值符合地理位置的空间逻辑,无异常数据。
可选优化方向
如果后续处理大规模数据,嵌套循环的效率会受限,可以尝试以下优化方式:
- 用
geosphere的distm函数批量生成距离矩阵,替代嵌套循环:# 直接生成距离矩阵,无需手动循环 distances <- distm(df_1[, c("lon", "lat")], df_2[, c("lon", "lat")], fun = distHaversine) - 用
dplyr+tidyr实现管道式操作,代码可读性更强:library(dplyr) library(tidyr) final <- df_1 %>% mutate(row_idx = row_number()) %>% cross_join(df_2 %>% mutate(col_idx = row_number())) %>% rowwise() %>% mutate(distance = haversine_distance(lon.x, lat.x, lon.y, lat.y)) %>% group_by(row_idx) %>% filter(distance == min(distance)) %>% ungroup() %>% select(name_1, lon_1 = lon.x, lat_1 = lat.x, name_2, lon_2 = lon.y, lat_2 = lat.y, distance)
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

