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

R语言如何基于经纬度合并坐标相近的两个DataFrame数据集

问题场景

现有公开可查的经纬度数据合并方案,大多针对两个数据框经纬度存在偏差的场景,通过计算点位空间距离实现最近邻匹配,不适用于经纬度精确对应、点位一一匹配的场景:

  • df1存储河流沿线点位的流量(体积流量)数据,包含纬度Lat、经度Lon、流量Q三个字段,示例数据如下:
df1 <- data.frame(Lat = c(2,4,1,2,5), Lon = c(6,7,8,9,8), Q = c(150, 120, 80, 95, 100))
  • df2存储同批次河流点位的治理相关数据,包含纬度Lat、经度Lon、治理指标T三个字段,示例数据如下:
df2 <- data.frame(Lat = c(2,4,1,2,5), Lon = c(6,7,8,9,8), T = c(17, 12, 8, 9, 10))

需要按经纬度字段匹配关联两个数据框,预期输出结果如下:

Lat  Long   Q     T
2     6    150    17
4     7    120    12
1     8     80     8
2     9     95     9
5     8    100    10
实现方案

由于两个表的经纬度为精确匹配关系,直接使用等值连接即可,无需引入复杂的空间距离计算逻辑,两种常用实现方式如下:

方法1:base R 原生实现

无需加载第三方包,直接用内置merge函数指定经纬度为连接键,最后调整列名、列顺序和预期输出对齐即可:

# 按经纬度等值连接
merge_res <- merge(df1, df2, by = c("Lat", "Lon"))
# 调整列顺序、将Lon重命名为Long
merge_res <- setNames(merge_res[, c("Lat", "Lon", "Q", "T")], c("Lat", "Long", "Q", "T"))

运行后输出的merge_res和预期结果完全一致。

方法2:dplyr 实现

如果习惯使用tidyverse语法,可调用inner_join实现连接,代码可读性更高、大数据量下运行速度更快:

library(dplyr)
merge_res <- df1 %>%
  inner_join(df2, by = c("Lat", "Lon")) %>%
  select(Lat, Long = Lon, Q, T)

注意:如果实际采集的经纬度存在极小的浮点精度误差(比如GPS采集值偏差在1e-6级别),可先对经纬度字段四舍五入保留固定小数位后再做等值连接,相比距离匹配方案运行效率高数个量级,也不会出现点位错配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:09:22