时间序列插值:月度数据转15天间隔日频数据
月度时间序列插值生成15天间隔数据
步骤1:转换日期格式
将原始数据中的date列从"月-年"格式转换为标准日期(约定为当月首日):
library(lubridate) # 解析"月-年"格式并转为日期类型,默认日为1 df$date <- parse_date_time(df$date, orders = "my") %>% as.Date()
步骤2:生成目标日期序列
按需求创建15天间隔的目标日期序列:
DateSeq <- data.frame(date = seq(as.Date("2016-09-01"), as.Date("2020-07-30"), by=15))
步骤3:创建含缺失值的数据框
合并原始数据与目标日期序列,得到包含所有目标日期、原始观测值(缺失值标记为NA)的数据框:
library(dplyr) merged_df <- DateSeq %>% left_join(df, by = "date")
步骤4:执行线性插值(优先方案)
使用approx()函数对sp1列做线性插值,填充缺失值:
merged_df$sp1_linear <- approx(x = merged_df$date, y = merged_df$sp1, xout = merged_df$date, method = "linear")$y
可选:三次插值实现
如果需要三次插值,可替换为以下方式:
# 方式1:使用approx的spline参数 merged_df$sp1_spline <- approx(x = merged_df$date, y = merged_df$sp1, xout = merged_df$date, method = "spline")$y # 方式2:直接调用spline函数 spline_res <- spline(x = df$date, y = df$sp1, xout = merged_df$date) merged_df$sp1_spline2 <- spline_res$y
结果示例
处理后的merged_df以日期为索引,包含原始观测值、线性插值结果和可选的三次插值结果,前几行输出如下:
head(merged_df) # date sp1 sp1_linear sp1_spline sp1_spline2 # 1 2016-09-01 2.58868 2.58868 2.58868 2.58868 # 2 2016-09-16 NA 1.54941 1.78728 1.78728 # 3 2016-10-01 0.51014 0.51014 0.51014 0.51014 # 4 2016-10-16 NA -0.15076 -0.20434 -0.20434 # 5 2016-11-01 -0.81165 -0.81165 -0.81165 -0.81165 # 6 2016-11-16 NA -0.66870 -0.73105 -0.73105
内容的提问来源于stack exchange,提问作者kl40
相关产品推荐
相关产品推荐

