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

如何在RStudio中依据另一数据表填充数据框的NA值?

用R根据匹配关系填充数据框中的NA值

首先还原你的两个数据集(可直接运行的R代码):

df <- data.frame(
  a = c(1,1,1,1,2,2,2,3,3,3,3),
  b = c("A", NA, "A", NA, "C", NA, "B", "A", NA, "C", "D"),
  stringsAsFactors = FALSE
)

fill_with <- data.frame(
  a = c(1,2,3),
  b = c("A", "B", "C"),
  stringsAsFactors = FALSE
)

需求:根据a列的匹配关系,用fill_with中对应a的b值,填充df里b列的NA值。

方法1:使用dplyr(tidyverse生态)

这是常用的tidy风格实现,步骤清晰易读:

library(dplyr)

df_filled <- df %>%
  # 按a列合并数据集,将fill_with的b值命名为b_fill作为辅助列
  left_join(fill_with, by = "a", suffix = c("", "_fill")) %>%
  # 用coalesce取第一个非NA值,替换原b列的NA
  mutate(b = coalesce(b, b_fill)) %>%
  # 移除辅助列
  select(-b_fill)

# 查看填充结果
print(df_filled)

方法2:使用base R(无需额外安装包)

如果不想加载第三方包,可通过基础R实现:

# 将fill_with转换为命名向量:以a的值为名称,对应b的值为向量元素
fill_vector <- setNames(fill_with$b, fill_with$a)

# 定位df中b列的NA位置,用匹配的a值从fill_vector中取对应值替换
df$b[is.na(df$b)] <- fill_vector[as.character(df$a[is.na(df$b)])]

# 查看填充结果
print(df)

两种方法都能得到你需要的填充结果:

a b
1  1 A
2  1 A
3  1 A
4  1 A
5  2 C
6  2 B
7  2 B
8  3 A
9  3 C
10 3 C
11 3 D

内容的提问来源于stack exchange,提问作者Csaba Daniel Farkaš

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:48:25