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

R如何根据dataframe的Name列匹配填充Username列的缺失值

原代码错误原因

你编写的ifelse(df$Name == df$Name, df$Username, NA)判断条件恒成立,等价于直接赋值原有Username列,不会触发填充逻辑。

修正后的实现方案

首先补全你示例中8行带缺失值的测试数据:

df <- structure(list(Name = c("ZiadAboultaif", "ScottAitchison", "DanAlbas", 
"JohnAldag", "OmarAlghabra", "ShafqatAli", "OmarAlghabra", "ScottAitchison"), 
Username = c("ziad_aboultaif", "ScottAAitchison", "DanAlbas", "jwaldag", 
"OmarAlghabra", "Shafqat_Ali_1", NA, NA)), row.names = c(NA, -8L), 
class = c("tbl_df", "tbl", "data.frame"))

方案1:tidyverse生态实现(代码可读性高)

library(dplyr)

df_filled <- df %>%
  # 按姓名分组
  group_by(Name) %>%
  # 每组内取第一个非空的Username覆盖所有行
  mutate(Username = na.omit(Username)[1]) %>%
  ungroup()

方案2:基础R实现(无需额外安装依赖包)

# 生成姓名到用户名的唯一映射关系
user_mapping <- unique(na.omit(df[c("Name", "Username")]))
# 用映射表匹配填充所有行的用户名
df$Username <- user_mapping$Username[match(df$Name, user_mapping$Name)]

两种方案执行后,都可以得到预期结果:索引7的OmarAlghabra、索引8的ScottAitchison的Username会被正确填充。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:06:07