You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按组扩展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)思路逻辑存在问题:

  1. replace_na(daily_count, first(daily_count))会把所有NA替换成整个数据集的第一个非NA值(10),无法区分不同的数值区间
  2. 基于错误的day_grp分组后,填充逻辑无法对应“后续值覆盖前面空白”的规则,自然得不到预期结果

内容的提问来源于stack exchange,提问作者maycca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:07:54