如何用前置日期值填充股价时间序列中的缺失日期?
补全股价时间序列并向前填充缺失值
问题描述
我有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包可以高效处理多公司的时间序列补全与填充,步骤如下:
- 加载依赖包
library(dplyr) library(tidyr)
- 定义全局日期范围
full_dates <- seq(as.Date("2010-01-01"), as.Date("2023-03-15"), by = "day")
- 处理单公司数据(示例)
如果仅处理A公司数据,可执行以下代码:
processed_data_a <- data_a %>% # 按公司分组 group_by(Company) %>% # 扩展为完整日期序列,缺失的Price会自动设为NA complete(Date = full_dates) %>% # 用前一个非缺失值填充NA(向前填充) fill(Price, .direction = "down") %>% # 取消分组 ungroup()
- 处理多公司数据
若你已将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
相关产品推荐
相关产品推荐

