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

如何在R中结合left_join()与grepl()实现邮政编码数据框左连接?

解决方案

要实现完整邮编数据框与前缀数据框的左连接,结合left_join()和grepl()可以这么操作:

首先加载dplyr工具包:

library(dplyr)

方法一:交叉组合后筛选匹配

先生成两个数据框的所有行组合,再用grepl()筛选出前缀匹配的记录,最后关联回原数据框:

# 生成全组合并筛选匹配项
matched_records <- cross_join(df, df2) %>%
  filter(grepl(paste0("^", ID.y), ID.x)) %>%
  select(ID = ID.x, var1, var2, cat)

# 左连接保留原数据框所有行
final_result <- left_join(df, matched_records, by = c("ID", "var1", "var2"))

方法二:逐行匹配前缀

用rowwise()逐行处理原数据框,通过grepl()找到对应前缀的分类值:

final_result <- df %>%
  rowwise() %>%
  mutate(cat = df2$cat[grepl(paste0("^", df2$ID), ID)]) %>%
  ungroup()

关键说明

  • paste0("^", df2$ID)给前缀加上正则符号^,确保匹配完整邮编的起始部分,避免出现部分字符匹配的错误
  • 两种方法都能实现需求:方法一适合数据量较小的场景,方法二逻辑更直观,逐行匹配对应前缀

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:00:16