R语言两次left_join匹配坐标产生重复值问题咨询
重复值产生原因
原代码仅用郊区作为唯一连接键,但df_2中存在同一郊区对应多个不同邮编坐标的记录,单键匹配会拉取该郊区下所有邮编的匹配结果,直接产生笛卡尔积式的重复行。
你提出的郊区+邮编双字段同时匹配的思路完全正确,双字段组合才是定位对应坐标的精准唯一键,从根源上避免无意义的错配和重复。
修正后代码
补全两次连接的匹配条件,同时加后缀区分买卖方的坐标列,避免列名冲突:
library(dplyr) result <- df_1 %>% # 匹配买方坐标:买方郊区+买方邮编双字段对应df_2的郊区+邮编 left_join( df_2, by = c("buyer_suburb" = "suburbs", "buyer_postcode" = "postcode") ) %>% # 匹配卖方坐标:卖方郊区+卖方邮编双字段对应df_2的郊区+邮编 left_join( df_2, by = c("seller_suburb" = "suburbs", "seller_postcode" = "postcode"), suffix = c("_buyer", "_seller") )
效果说明
运行后返回的结果行数和原始df_1完全一致,无多余重复行:
- 列
coordinates_buyer为匹配到的买方对应坐标 - 列
coordinates_seller为匹配到的卖方对应坐标
所有坐标完全和邮编一一对应,不会出现同郊区不同邮编的错配问题,比如Sally的买方邮编008会精准匹配到Sandy邮编008对应的坐标0.02, 8.00,不会错配到同属Sandy的001邮编坐标。
内容的提问来源于stack exchange,提问作者lenlen
相关产品推荐
相关产品推荐

