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

R语言基于多列匹配规则用第二个dataframe的值替换目标dataframe的NA

R 多条件匹配填充缺失值方案

前置注意

你之前代码运行未达预期,大概率是因为示例中用cbind构造的是字符矩阵而非data.frame,先完成数据类型转换:

# 转换为data.frame并调整列类型
df1 <- as.data.frame(df1, stringsAsFactors = FALSE)
df1$C <- as.integer(df1$C)
df2 <- as.data.frame(df2, stringsAsFactors = FALSE)
df2$C <- as.integer(df2$C)

方案1:Base R 实现

利用你确认的「A+B拼接值唯一匹配」的前提,直接匹配赋值:

# 生成匹配索引
match_pos <- match(paste(df2$A, df2$B), paste(df1$A, df1$B))
# 仅填充df2中C列为NA的位置
df2$C[is.na(df2$C)] <- df1$C[match_pos[is.na(df2$C)]]

方案2:dplyr 实现(更简洁,支持多列批量填充)

使用dplyr内置的rows_patch函数,专门用于通过主键匹配,用参考表的值填充目标表的缺失值,不会覆盖原有非缺失值:

library(dplyr)
# by参数指定匹配主键,select里添加需要填充的所有列即可
df2 <- df2 %>%
  rows_patch(select(df1, A, B, C), by = c("A", "B"))

如果后续需要填充除C外的其他共有列,只需要在select中加入对应列名即可,无需修改其他逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:00:01