按组扩展data.frame并填充NA值:前置日均数值填充问题
解决方案:按区间向前填充NA值
完整实现代码
library(tidyverse) day.range <- 2:12 df <- data.frame(day = c(4, 6, 10), daily_count = c(10, 20, 30)) # 扩展数据到目标日期范围并排序 expanded_df <- df %>% right_join(data.frame(day = day.range), by = "day") %>% arrange(day) # 向上填充NA:用后续的非NA值覆盖前面的空白区间 result_df <- expanded_df %>% fill(daily_count, .direction = "up") print(result_df)
输出结果
day daily_count 1 2 10 2 3 10 3 4 10 4 5 20 5 6 20 6 7 30 7 8 30 8 9 30 9 10 30 10 11 NA 11 12 NA
方法说明
核心使用tidyr::fill()函数的.direction = "up"参数:
- 默认
fill()是向下填充(用上方非NA值覆盖下方NA),而"up"方向会用下方的非NA值向上填充前面的NA,直到遇到上一个非NA值为止,完美匹配需求——把每个日期的日均数值填充到它之前的所有空白日期。
原代码问题分析
你尝试的group_by(day_grp)思路逻辑存在问题:
replace_na(daily_count, first(daily_count))会把所有NA替换成整个数据集的第一个非NA值(10),无法区分不同的数值区间- 基于错误的
day_grp分组后,填充逻辑无法对应“后续值覆盖前面空白”的规则,自然得不到预期结果
内容的提问来源于stack exchange,提问作者maycca
相关产品推荐
相关产品推荐

