如何在R数据框分组内用指定行值替换NA值(WAP场景)
解决方案
可以在你的分组处理逻辑中,先提取同分组下FiscalYear=2022对应的WAP_2021值作为填充基准,再用coalesce()替换WaP列的NA值。以下是完整的dplyr代码示例:
library(dplyr) # 假设你的数据框名为df,已有初始生成WaP的逻辑 df_processed <- df %>% group_by(Material, Client, CompanyCode, STOCK_UOM) %>% mutate( # 第一步:按规则生成初始WaP列 WaP = case_when( FiscalYear == 2022 ~ WAP_2021, FiscalYear == 2023 ~ coalesce(WAP_2022, WAP_2021), # 其他年份可根据需求补充,默认设为NA TRUE ~ NA_real_ ), # 第二步:提取同分组下FiscalYear=2022的WAP_2021值作为填充值 fill_wap = first(WAP_2021[FiscalYear == 2022]), # 第三步:替换WaP列中的NA值 WaP = coalesce(WaP, fill_wap) ) %>% ungroup() %>% # 可选:删除临时生成的fill_wap列 select(-fill_wap)
关键逻辑说明
first(WAP_2021[FiscalYear == 2022]):在每个分组内筛选出FiscalYear=2022的行,提取对应的WAP_2021值。如果分组内FiscalYear=2022的行唯一,first()能确保拿到正确值;若有多行,可根据实际情况替换为unique()或mean()等聚合函数。coalesce(WaP, fill_wap):自动将WaP中的NA值替换为fill_wap,保留非NA的WaP原值,无需额外判断。
内容的提问来源于stack exchange,提问作者Jakob Orel
相关产品推荐
相关产品推荐

