R语言按分组条件执行complete函数补全月度缺失观测值的实现方法
R数据补全解决方案
实现逻辑
你需要针对每个Alphabet因子的首次出现时间限定补全范围,而非全量补全所有月份,核心实现代码如下:
library(tidyverse) # 直接基于你提供的原始DF运行以下代码即可 DF_filled <- DF %>% # 按因子水平分组单独处理 group_by(Alphabet) %>% # 生成月份序号、记录当前因子的首次出现月份 mutate( month_order = as.integer(Month2), first_month = min(month_order) ) %>% # 仅补全首次出现月份到2021年10月范围内的缺失值 complete( Month2 = levels(Month2)[first_month[1]:10], fill = list(Sum = 0) ) %>% # 清理辅助字段 ungroup() %>% select(-month_order, -first_month)
效果说明
- 因子X首次出现在6月,补全后仅保留6-10月的记录,缺失月份填充0,不会生成1-5月的冗余记录
- 因子Y首次出现在1月,会补全全年1-10月所有缺失月份,缺失值填充0
- 因子Z本身有全量记录,补全后无变化
如果你的统计周期延伸到12月,仅需要把代码中first_month[1]:10的10替换为12即可。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

