在R中如何用前一交易日数据填充缺失日期的对应字段值
R语言时间序列缺失日期补全实现方法
你可以结合tidyr的complete和fill两个函数实现需求,无需手动指定缺失的具体日期,代码可自动适配任意连续日期范围的补全需求,完整实现代码如下:
# 加载依赖包(tidyverse包含tidyr和dplyr) library(tidyverse) # 读取原始数据集(你提供的dput结构直接赋值即可) df <- structure(list(Date = c("2020-10-28", "2020-10-29", "2020-10-30", "2020-11-02", "2020-11-03", "2020-11-04", "2020-11-05", "2020-11-06", "2020-11-09", "2020-11-10"), Open = c(1384L, 1297L, 1283L, 1284L, 1263L, 1224L, 1194L, 1196L, 1207L, 1200L), High = c(1384L, 1297L, 1283L, 1284L, 1263L, 1224L, 1194L, 1196L, 1207L, 1200L), Low = c(1384L, 1297L, 1283L, 1284L, 1263L, 1224L, 1194L, 1196L, 1207L, 1200L ), Close = c(1384L, 1297L, 1283L, 1284L, 1263L, 1224L, 1194L, 1196L, 1207L, 1200L), Adjusted_close = c(1384L, 1297L, 1283L, 1284L, 1263L, 1224L, 1194L, 1196L, 1207L, 1200L), Volume = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), row.names = c(NA, 10L), class = "data.frame") # 补全缺失日期并填充数值 df_filled <- df %>% # 将字符串格式的日期转换为日期类型,方便生成连续序列 mutate(Date = as.Date(Date)) %>% # 生成数据集覆盖范围内的所有连续日期,补全缺失的行 complete(Date = seq.Date(min(Date), max(Date), by = "day")) %>% # 所有列向前填充,缺失值自动沿用前一交易日的数值 fill(everything(), .direction = "down") # 如需导出为csv文件可执行以下代码 # write.csv(df_filled, "补全后行情数据.csv", row.names = FALSE)
运行后得到的df_filled就是你需要的结果,所有缺失的非交易日都会自动补全,数值完全继承前一个交易日的对应字段值,和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者saigafreak
相关产品推荐
相关产品推荐

