如何基于其他行对应值使用R dplyr填充数据框缺失值
R dplyr基于已有对应关系填充缺失值方案
两种适配不同数据规模的实现方案如下:
- 方案1适合小到中等规模数据,且每个国家至少存在1条非NA的continent记录,代码更简洁
- 方案2适合10万行以上的大规模数据集,国家维度远小于总数据行数时性能提升尤其明显,映射表可单独维护,方便补充缺失的对应关系
方案1:分组双向填充
library(dplyr) library(tidyr) # 你的示例数据 df <- data.frame( country = c("USA","UK","Egypt","Brazil","USA", "UK"), continent = c("North America","Europe","Africa","South America", NA, NA) ) # 填充逻辑 df_filled <- df %>% group_by(country) %>% fill(continent, .direction = "downup") %>% # 双向填充,确保同国家所有NA都能匹配到已有值 ungroup()
方案2:映射表左连接(大数据量优先)
library(dplyr) # 步骤1:从现有数据提取非NA的唯一国家-大洲对应关系,生成映射表 country_continent_map <- df %>% filter(!is.na(continent)) %>% distinct(country, continent) # 步骤2:用映射表匹配替换原有带NA的continent列 df_filled <- df %>% select(-continent) %>% left_join(country_continent_map, by = "country")
注意:如果存在部分国家在现有数据中无任何非NA的continent记录,匹配后对应值仍为NA,手动给映射表补充该国家的对应关系后重新执行匹配即可。
内容的提问来源于stack exchange,提问作者sergio_ag
相关产品推荐
相关产品推荐

