R Dplyr:为整数Idx列间隙的缺失值补充对应行的实现方法
解决方案
你可以用tidyr包的complete()函数先补全所有缺失的Idx行,再配合fill()填充累计值cN即可,这两个函数都是tidyverse生态的原生工具,和dplyr适配度很高。
完整可运行代码
# 需提前加载依赖包 library(dplyr) library(tidyr) T_filled <- T2 %>% # 按分类A和日期Date分组,每个分组单独处理 group_by(A, Date) %>% # 生成分组内Idx最小到最大值的连续整数序列,缺失行的N默认填充为0 complete(Idx = full_seq(Idx, period = 1), fill = list(N = 0)) %>% # 按Idx升序排序,保证行顺序正确 arrange(Idx) %>% # 向下填充cN,缺失行自动继承上一行的累计值 fill(cN, .direction = "down") %>% # 可选:取消分组,返回普通数据框格式 ungroup()
原理说明
- 你之前直接用
fill()没有生效,是因为fill()只能填充已有行的空值,不能自动生成缺失的Idx行,必须先用complete()生成缺失行后再填充。 full_seq(Idx, period = 1)会自动识别每个分组内Idx的最小、最大值,生成中间所有连续的整数值,不需要手动计算范围。fill()的.direction = "down"参数就是指定用上方最近的非空值填充当前空值,正好匹配你需要的「继承上一行累计值」的需求。
内容的提问来源于stack exchange,提问作者NaiveBayesian
相关产品推荐
相关产品推荐

