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

