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

如何通过ID与姓名的匹配关系批量填充dataframe中的缺失值

不需要逐行遍历,使用ID与姓名的映射匹配即可实现高效填充,50万行规模可秒级完成,操作方案如下:

前置处理

首先将姓名列中的空字符串、空白值统一转换为标准NA值,方便后续匹配:

df$Names[trimws(df$Names) == ""] <- NA

步骤1:构建唯一映射表

提取所有ID和姓名均非空的行,去重得到ID到姓名的唯一映射关系:

# 生成初始映射表
name_map <- unique(df[!is.na(df$Names) & !is.na(df$ID), c("ID", "Names")])
# 去重保证每个ID仅对应一个姓名,若存在同ID多姓名冲突可在此处自定义处理逻辑
name_map <- name_map[!duplicated(name_map$ID), ]

可选:冲突校验

如果需要确认是否存在同一个ID对应多个不同姓名的异常情况,可运行以下代码检查:

library(dplyr)
conflict_cnt <- name_map %>% 
  count(ID) %>% 
  filter(n > 1) %>% 
  nrow()
# 若conflict_cnt大于0,说明存在映射冲突,需要先清理异常数据再进行填充

步骤2:批量填充缺失值

方法1:Base R实现

df$Names <- ifelse(
  is.na(df$Names),
  name_map$Names[match(df$ID, name_map$ID)],
  df$Names
)

方法2:dplyr实现(可读性更高)

library(dplyr)
df <- df %>%
  left_join(name_map, by = "ID", suffix = c("", "_map")) %>%
  mutate(Names = coalesce(Names, Names_map)) %>%
  select(-Names_map)

补充说明

如果同时存在ID缺失、姓名存在的场景,只需反过来构建姓名→ID的映射表,用同样的逻辑填充缺失的ID即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:36:03