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

如何用前置日期值填充股价时间序列中的缺失日期?

补全股价时间序列并向前填充缺失值

问题描述

我有100家公司2010年1月1日至2023年3月15日的每日股价时间序列数据,周末及公共假期存在日期缺失。以A公司为例,原始数据如下:

data_a <- data.frame(
  Date = as.Date(c("2010-03-01", "2010-04-01", "2010-05-01", "2010-06-01", "2010-08-01", "2010-09-01", "2010-11-01")),
  Price = c(91, 92, 93, 91, 90, 91, 93),
  Company = rep("A", 7)
)

需要补全所有缺失日期,并用前一个可用日期的股价填充缺失值,处理后的数据需覆盖完整日期范围,且每个日期对应有效股价。

解决方案

使用dplyr和tidyr包可以高效处理多公司的时间序列补全与填充,步骤如下:

  1. 加载依赖包
library(dplyr)
library(tidyr)
  1. 定义全局日期范围
full_dates <- seq(as.Date("2010-01-01"), as.Date("2023-03-15"), by = "day")
  1. 处理单公司数据(示例)
    如果仅处理A公司数据,可执行以下代码:
processed_data_a <- data_a %>%
  # 按公司分组
  group_by(Company) %>%
  # 扩展为完整日期序列,缺失的Price会自动设为NA
  complete(Date = full_dates) %>%
  # 用前一个非缺失值填充NA(向前填充)
  fill(Price, .direction = "down") %>%
  # 取消分组
  ungroup()
  1. 处理多公司数据
    若你已将100家公司的数据合并为一个DataFrame(比如命名为all_companies_data),只需复用上述逻辑,分组会自动处理每个公司:
# 假设all_companies_data包含所有公司的Date、Price、Company列
processed_all_data <- all_companies_data %>%
  group_by(Company) %>%
  complete(Date = full_dates) %>%
  fill(Price, .direction = "down") %>%
  ungroup()

补充说明

  • complete()函数会为每个公司生成指定范围内的所有日期,原始数据中不存在的日期会插入NA值
  • fill(..., .direction = "down")会将前一个非缺失的Price值填充到后续的NA位置,完美匹配"前值填充"需求
  • 若某公司在起始日期(2010-01-01)前没有数据,起始日期到该公司第一个数据日期之间的Price会保持NA,你可以根据需求用第一个可用值反向填充(添加fill(Price, .direction = "up")即可)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:37:28