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

如何在R中通过匹配地址合并两个DataFrame获取对应经纬度?

R数据框合并问题解决

我有两个R数据框df1和df2,数据如下:

# df1
Cust_id Cust_name   Cust_dob    Cust_address
1         Andrew    10/11/1990  New York
2         Dillain   01/02/1970  San Francisco
3         Alma      07/11/1985  Miami
4         Wesney    21/10/1979  New York
5         Kiko      10/12/1994  Miami

# df2
Cust_address    Latitude    Longitude
New York        40.7128     74.0060
San Francisco   37.7749     122.4194
Miami           25.7617     80.1918
Texas           31.9686     99.9018
Dallas          32.7767     96.7970

我需要将这两个数据集合并,让df2的Latitude和Longitude列匹配df1的Cust_address列,得到如下结果:

# df3
Cust_id Cust_name   Cust_dob    Cust_address    Latitude    Longitude
1       Andrew      10/11/1990   New York       40.7128    74.0060
2       Dillain     01/02/1970   San Francisco  37.7749    122.4194
3       Alma        07/11/1985   Miami          25.7617    80.1918
4       Wesney      21/10/1979   New York       40.7128    74.0060
5       Kiko        10/12/1994   Miami          25.7617    80.1918

我尝试了以下代码,但没得到预期结果:

df3 = merge(x=df1,y=df2,by="Cust_address",all=TRUE)

解决方法

问题出在all=TRUE参数上,这个参数会执行全连接,保留两个数据框中所有的行,包括df2里Texas、Dallas这些df1中不存在的地址,导致结果多出不必要的行。

要实现预期效果,需要使用左连接,只保留df1的所有行,并匹配df2中对应的地址信息,有两种常用方法:

方法1:使用基础R的merge函数

将all=TRUE改为all.x=TRUE即可:

df3 <- merge(x = df1, y = df2, by = "Cust_address", all.x = TRUE)
  • all.x=TRUE:保留左数据框(df1)的所有行,匹配右数据框(df2)中符合条件的行,没有匹配到的会填充NA(这里你的数据都能匹配到,所以不会有NA)。

方法2:使用dplyr包的left_join(更直观,适合新手)

如果安装了tidyverse系列包,可以用更易读的语法:

library(dplyr)
df3 <- df1 %>% left_join(df2, by = "Cust_address")

left_join默认就是保留左表(df1)的所有行,匹配右表(df2)的对应数据,和merge的all.x=TRUE效果一致。

执行以上任意一种代码,就能得到你想要的df3结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:54:20