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

R语言:如何将时间序列中周末缺失值填充为对应周五数据?

用R补全周末缺失的价格数据(填充前一个周五的值)

这里有一个简洁的解决方案,用tidyverse和lubridate包来实现你的需求——自动识别周末缺失值,并用对应周五的数据填充:

步骤1:加载所需包

首先确保你安装了这些包,如果没安装先运行install.packages(c("tidyverse", "lubridate")):

library(tidyverse)
library(lubridate)

步骤2:预处理数据(可选但推荐)

你的原始数据是按日期倒序排列的(最新日期在前),为了后续填充逻辑更顺畅,先把数据按日期升序排列:

DF1 <- DF1 %>% arrange(Date)

步骤3:生成完整日期序列并合并

首先创建覆盖你数据全范围的完整日期序列,再和原数据左连接,这样周末的缺失值会以NA形式显现:

# 生成从最早到最晚的完整日期序列
full_dates <- tibble(Date = seq(min(DF1$Date), max(DF1$Date), by = "day"))

# 合并原数据与完整日期,得到带NA的数据集
DF_complete <- full_dates %>%
  left_join(DF1, by = "Date")

步骤4:用周五数据填充周末

通过标记周五、分组,再向下填充的方式,把周五的值复制到对应的周六和周日:

DF_filled <- DF_complete %>%
  mutate(
    # 提取星期几的缩写(Sun到Sat)
    weekday = wday(Date, label = TRUE),
    # 标记当前行是否为周五
    is_friday = weekday == "Fri",
    # 为每个周五及后续周末创建分组ID
    friday_group = cumsum(is_friday)
  ) %>%
  # 按分组向下填充NA值(用周五的值覆盖周六、周日的NA)
  group_by(friday_group) %>%
  fill(Coalprice, Gasprice, Co2emissionprice, .direction = "down") %>%
  ungroup() %>%
  # 移除辅助列(可选)
  select(-weekday, -is_friday, -friday_group)

验证结果

你可以检查任意一个周末的数据,确认填充是否正确:

# 查看2015-12-25(周五)及其周末的数据
DF_filled %>% filter(Date >= ymd("2015-12-25") & Date <= ymd("2015-12-27"))

输出会是:

# A tibble: 3 × 4
  Date       Coalprice Gasprice Co2emissionprice
  <date>         <dbl>    <dbl>            <dbl>
1 2015-12-25     47        14.2             8.22
2 2015-12-26     47        14.2             8.22
3 2015-12-27     47        14.2             8.22

这个逻辑会自动处理所有周末,每个周末都用它前一个周五的数据填充,完全符合你的需求。

内容的提问来源于stack exchange,提问作者S. Jay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:23:30