如何基于已填充行的hs值自动匹配填充desc列的NA值
批量填充desc列NA值:基于hs与desc的对应关系
原始数据集
hs desc 1 34 a 2 53 b 3 64 c 4 54 d 5 34 <NA> 6 34 <NA> 7 53 <NA> 8 53 b 9 53 b 10 53 <NA>
需求说明
理想状态下hs列的每个值对应唯一固定的desc值,但当前数据集的desc列存在大量NA。由于实际数据中hs值数量极多,无法通过ifelse或dplyr::case_when手动设置条件,需要自动完成:
- 扫描已填充行,识别
hs与desc的对应关系; - 基于该关系批量填充
desc列的所有NA值。
解决方案
方法1:使用dplyr(tidyverse生态)
通过分组后提取每组非NA的desc值,统一替换组内的NA:
library(dplyr) # 假设数据框名为df df_filled <- df %>% group_by(hs) %>% # 提取每组第一个非NA的desc值,用于填充组内所有NA mutate(desc = first(na.omit(desc))) %>% ungroup()
方法2:使用data.table(适合大数据集)
data.table的分组操作效率更高,适合处理超大规模数据:
library(data.table) # 将数据框转为data.table格式 setDT(df) # 按hs分组,用组内第一个非NA的desc填充所有NA df[, desc := na.omit(desc)[1], by = hs]
说明
- 如果某个
hs分组内的desc全为NA,该组的NA会保留(无可用对应值); - 两种方法均假设同一
hs对应的非NAdesc值唯一,符合题目中“每个hs对应唯一固定desc”的前提。
内容的提问来源于stack exchange,提问作者Pedro Cardoso
相关产品推荐
相关产品推荐

