如何用 r 中的适当值填充连续时间序列中的值

How can I fill in the values in consecutive time series with appropriate values in r

我有一个包含连续月份数据的月度时间序列,即某个月份缺少数据。对于这种情况,我如何在开始日期和结束日期之间填写一些适当的值。请注意我没有设置特定的数据范围,因为开始和结束日期只是由从数据表中检索到的日期列决定的。 例如,我的数据是

Date={2016-3-1, 2016-8-1, 2016-9-1, 2017-3-1,2017-6-1).
Price={111,122,124,142,134}

我的预期输出是

Date={2016-3-1,2016-4-1,2016-5-1,2016-6-1,.......2017-6-1}, 
Price={111,112,113......134}

(这里我只是填了一些虚拟数字,请问有没有人能建议一下这里填数字的最佳方式是什么)

非常感谢!!

如果你不关心插值数据是否必须是整数,你可以这样做:

df <- data.frame(Date=as.Date(c('2016-3-1', '2016-8-1', '2016-9-1', '2017-3-1','2017-6-1'), format='%Y-%m-%d'), 
                 Price=c(111,122,124,142,134))

这是您当前的数据。然后您可以提取第一个和最后一个日期以创建这两个日期之间的完整日期范围:

firstDate <- head(df$Date, 1)
lastDate <- tail(df$Date, 1)
allDates <- data.frame(Date = seq.Date(firstDate, lastDate, by = 'month'))

然后将原始数据与这组所有日期合并:

fulldf <- merge(df, allDates, by = 'Date', all = TRUE)

请注意,NA 出现在没有原始数据值的日期上。

例如,现在您可以使用 stinepack 库来插入缺失数据。例如,Stineman 算法据说比样条更不容易振荡。

library(stinepack)
fulldf$Price <- na.stinterp(fulldf$Price, along = fulldf$Date)

请注意,插值数据不再是整数。如果愿意,您可以将它们四舍五入到最接近的整数。