根据现有数据集创建时间序列

时间:2018-06-27 17:58:30

标签: r dataframe time-series forecasting

我想将以下数据转换为时间序列-因此我可以使用autoplot()

我该如何做才能使“年”列位于x轴上? (我知道日期的格式必须为2006年1月1日,我可以接受):

Team  PTS    W   GF   GA     S    SA   Year
NSH    88   38  214  233  2382  2365   2014
NSH   104   47  226  202  2614  2304   2015
NSH    96   41  224  213  2507  2231   2016
NSH    94   41  238  220  2557  2458   2017
NSH   117   53  261  204  2641  2650   2018

使用as.ts()会在Year列中显示一些非常大且无法使用的数字。谢谢!我想使用新的时间序列框架进行预测:ARIMA,VAR等。

2 个答案:

答案 0 :(得分:2)

我已经在R中使用ts()函数取得了成功。对于年度数据,代码看起来像这样。

df <- ts(data, frequency = 1, start = 2014)
autoplot(df) 

这应该给您想要的结果。

答案 1 :(得分:1)

这会给您您想要的东西吗?

df_ts <- ts(df[ , setdiff(names(df), c("Team", "Year"))],
            start = 2014,
            end = 2018,
            frequency = 1)
class(df_ts)
#[1] "mts"    "ts"     "matrix"

我从强制中排除了列TeamYear,因为Year似乎没有用,并且Team是字符类型。来自?ts

  

时间序列必须至少具有一个观测值,尽管它们不必为数字,但对非数字序列的支持非常有限。

使用ggfortify::autoplot.ts进行绘制

library(ggfortify)
autoplot(df_ts)

enter image description here

数据

df <- structure(list(Team = c("NSH", "NSH", "NSH", "NSH", "NSH"), PTS = c(88L, 
104L, 96L, 94L, 117L), W = c(38L, 47L, 41L, 41L, 53L), GF = c(214L, 
226L, 224L, 238L, 261L), GA = c(233L, 202L, 213L, 220L, 204L), 
    S = c(2382L, 2614L, 2507L, 2557L, 2641L), SA = c(2365L, 2304L, 
    2231L, 2458L, 2650L), Year = 2014:2018), .Names = c("Team", 
"PTS", "W", "GF", "GA", "S", "SA", "Year"), class = "data.frame", row.names = c(NA, 
-5L))

修改

在图中显示缺失观测值的一种方法是将隐式缺失观测值转换为显式缺失观测值。我将使用tidyr的{​​{1}}

complete()

enter image description here

数据2

library(tidyr)
df_complete <- complete(df_incomplete, Year = min(Year):max(Year))
df_complete_ts <- ts(df_complete[ , setdiff(names(df_complete), c("Team", "Year"))],
                     start = 2011,
                     frequency = 1)
autoplot(df_complete_ts)