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

如何用两个DataFrame的匹配数据填充目标DataFrame的SIC列且不覆盖

解决方法

基础R实现

先通过df2为df1填充SIC列,之后仅针对未匹配成功(值为NA)的行,用df3进行补全,彻底避免覆盖已匹配的结果:

# 第一步:从df2匹配填充SIC
df1$SIC <- df2$SIC[match(df1$`Descr.Activity`, df2$Descr)]

# 第二步:仅处理SIC为NA的行,用df3补全
na_rows <- is.na(df1$SIC)
df1$SIC[na_rows] <- df3$SIC[match(df1$`Descr.Activity`[na_rows], df3$Descr)]

dplyr(tidyverse)简洁实现

如果习惯使用tidyverse工具链,可以通过两次左连接结合coalesce函数自动优先保留df2的匹配结果,再补充df3的内容:

library(dplyr)

df1 <- df1 %>%
  # 关联df2获取对应SIC
  left_join(df2, by = c("Descr.Activity" = "Descr")) %>%
  # 关联df3获取另一组SIC,临时命名为SIC_df3
  left_join(df3, by = c("Descr.Activity" = "Descr"), suffix = c("", "_df3")) %>%
  # 优先保留df2的SIC,无匹配时用df3的结果
  mutate(SIC = coalesce(SIC, SIC_df3)) %>%
  # 移除临时生成的辅助列
  select(-SIC_df3)

方法说明

  • 基础R方案通过精准筛选未匹配的行,仅对这部分内容进行二次匹配,完全不会覆盖已从df2获取的有效数据;
  • dplyr方案利用coalesce函数自动选取第一个非NA值的特性,天然优先保留df2的匹配结果,再补充df3的内容;
  • 两种方案均无需合并df2和df3,完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:50:41