将缺少日期的数据框转换为时间序列

transform data frame with missing dates into time series

我在将数据框转换为时间序列对象时遇到问题。

数据框 olympic 来自 fpp 包。

library(fpp)
olympic 

如何将这个具有带间隙的年份列的数据框转换为时间序列,以便与 fpp 包一起用于预测?

我试过了

olympic_new <- ts(olympic[,-1], start=1896, end=1996, deltat=4)  

但这不起作用,因为 war 期间的 olympics 间隔超过 4 年。

如何将olympic中的Year列理解为新的ts对象的索引?

我的最终目标是对新对象使用预测函数,例如:

meanf(olympic_new, h=4) 

如果您使用 dput(olympic) 并将其复制到您的问题中,这对我们来说会更容易。

olympic <- 
structure(list(Year = c(1896L, 1900L, 1904L, 1908L, 1912L, 1920L, 
1924L, 1928L, 1932L, 1936L, 1948L, 1952L, 1956L, 1960L, 1964L, 
1968L, 1972L, 1976L, 1980L, 1984L, 1988L, 1992L, 1996L), time = c(54.2, 
49.4, 49.2, 50, 48.2, 49.6, 47.6, 47.8, 46.2, 46.5, 46.2, 45.9, 
46.7, 44.9, 45.1, 43.8, 44.66, 44.26, 44.6, 44.27, 43.87, 43.5, 
43.49)), .Names = c("Year", "time"), class = "data.frame", row.names = c(NA, 
-23L))

你只需在需要的地方填充一些NA

year <- seq.int(1896L, 1996L, by = 4L)
y <- rep.int(NA, length(year))
y[match(olympic$Year, year)] <- olympic$time

olympic_new <- ts(y, start = 1896, end = 1996, deltat = 4)

#Time Series:
#Start = 1896 
#End = 1996 
#Frequency = 0.25 
# [1] 54.20 49.40 49.20 50.00 48.20    NA 49.60 47.60 47.80 46.20 46.50    NA
#[13]    NA 46.20 45.90 46.70 44.90 45.10 43.80 44.66 44.26 44.60 44.27 43.87
#[25] 43.50 43.49

然后

meanf(olympic_new,h=4)

#     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
#2000       46.51957 42.93628 50.10285 40.91319 52.12594
#2004       46.51957 42.93628 50.10285 40.91319 52.12594
#2008       46.51957 42.93628 50.10285 40.91319 52.12594
#2012       46.51957 42.93628 50.10285 40.91319 52.12594