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

时间:2016-09-04 19:48:22

标签: r time-series forecasting

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

数据框是来自olympic包的fpp

library(fpp)
olympic 

如何将具有空白的Year列的数据框转换为与fpp包一起用于预测的时间序列?

我试过

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

但这不起作用,因为战争期间olympics的差距超过4年。

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

我的最终目标是在新对象上使用预测功能,例如:

meanf(olympic_new, h=4) 

1 个答案:

答案 0 :(得分:1)

如果您使用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