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

如何依据经纬度前4位合并两个精度不同的Data Frame

R语言:基于经纬度前4位匹配合并DataFrame

我有两个包含纬度(Latitude)、经度(Longitude)和速度(Speed)字段的数据框:DF1的经纬度保留三位小数,DF2的经纬度保留五位小数。需要依据经纬度值的前4位数字合并两者,仅保留经纬度前4位匹配的记录;合并结果要保留DF2的完整经纬度值,并整合双方的Speed字段,不匹配的记录直接忽略。


示例数据

DF1

A_LatA_LongA_Speed
5.6672.4431345

对应的R构造代码:

DF1 <- structure(list(A_Lat = c(5.667, 5.667, 5.667, 5.667, 5.663, 5.662
), A_Long = c(2.443, 2.445, 2.445, 2.445, 2.445, 2.445), A_Speed = c(1345L, 
3551L, 3551L, 3551L, 3551L, 3551L)), class = "data.frame", row.names = c(NA, 
6L))

DF2

B_LatB_LongB_Speed
5.667812.443232345

对应的R构造代码:

DF2 <- structure(list(B_Lat = c(5.66781, 5.66783, 5.66743, 5.66723, 
5.66734, 5.66712), B_Long = c(2.44323, 2.44534, 2.44523, 2.44512, 
2.44512, 2.44543), B_Speed = c(2345L, 4551L, 5551L, 7551L, 7551L, 
8551L)), class = "data.frame", row.names = c(NA, 6L))

期望合并结果

R_LatR_LongR_B_SpeedR_A_Speed
5.667812.4432323451345

解决方案

核心思路是先为两个数据框生成用于匹配的经纬度前4位标识,再基于这些标识进行内连接(仅保留匹配记录),最后整理结果格式。

完整实现代码

# 加载数据
DF1 <- structure(list(A_Lat = c(5.667, 5.667, 5.667, 5.667, 5.663, 5.662
), A_Long = c(2.443, 2.445, 2.445, 2.445, 2.445, 2.445), A_Speed = c(1345L, 
3551L, 3551L, 3551L, 3551L, 3551L)), class = "data.frame", row.names = c(NA, 
6L))

DF2 <- structure(list(B_Lat = c(5.66781, 5.66783, 5.66743, 5.66723, 
5.66734, 5.66712), B_Long = c(2.44323, 2.44534, 2.44523, 2.44512, 
2.44512, 2.44543), B_Speed = c(2345L, 4551L, 5551L, 7551L, 7551L, 
8551L)), class = "data.frame", row.names = c(NA, 6L))

# 生成匹配用的经纬度前4位字段(转字符串提取,避免浮点精度问题)
DF1$match_lat <- substr(as.character(DF1$A_Lat), 1, 4)
DF1$match_long <- substr(as.character(DF1$A_Long), 1, 4)

DF2$match_lat <- substr(as.character(DF2$B_Lat), 1, 4)
DF2$match_long <- substr(as.character(DF2$B_Long), 1, 4)

# 基于匹配字段做内连接
merged_df <- merge(DF2, DF1, by = c("match_lat", "match_long"), all = FALSE)

# 整理结果字段并重命名
result_df <- merged_df[, c("B_Lat", "B_Long", "B_Speed", "A_Speed")]
names(result_df) <- c("R_Lat", "R_Long", "R_B_Speed", "R_A_Speed")

# 输出结果
print(result_df)

代码说明

  1. 生成匹配字段:将经纬度转为字符串后提取前4位(包含小数点),避免直接用数学运算可能带来的浮点精度误差。
  2. 内连接合并:使用merge()的all=FALSE参数,仅保留经纬度前4位同时匹配的记录。
  3. 结果整理:筛选需要的字段并重命名为期望的格式,保留DF2的完整经纬度值。

运行上述代码后,将得到与示例一致的合并结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:00:13