【问题标题】:Creating a Time Series from an Existing Data Set从现有数据集创建时间序列
【发布时间】:2018-12-06 16:59:44
【问题描述】:

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

如何做到这一点,以使“年份”列成为 x 轴上的内容? (我知道日期的格式必须是 01-01-2006,我可以接受):

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() 会产生一些非常大且无法使用的数字列。谢谢!我想使用新的时间序列框架进行预测:ARIMA、VAR 等。

【问题讨论】:

  • autoplot 可能不会做你想做的事 rdocumentation.org/packages/ggplot2/versions/2.2.1/topics/… 。为什么不用plot()ggplot() 绘图?
  • 是的,但如果我可以将其放入 autoplot(),它将简化我的流程。我用ggplot(NSH_stats, aes(Year, PTS)) + geom_line() 轻松做到了
  • 这样您就可以在任何地方轻松创建函数plot_ts <- function(df){ggplot(df, aes(Year, PTS)) + geom_line())}plot_ts(NSH_stats)

标签: r dataframe time-series forecasting


【解决方案1】:

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

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

这应该会给你想要的结果。

【讨论】:

    【解决方案2】:

    这是否给了你想要的东西:

    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)
    

    数据

    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))
    

    编辑

    在绘图中显示缺失观察的一种方法是将隐式缺失观察转换为显式缺失观察。我会用tidyrcomplete()

    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)
    

    数据2

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

    【讨论】:

    • 有效。我的完整数据集从 2006 年开始,但我缺少一年(2013 年),有没有办法在中间开始/停止绘图,或者我必须为那一年创建一个假行?
    • @papelr 更新了答案。希望这会有所帮助。
    • 非常感谢 - 2013 年是 NHL 停摆年,这就是原因
    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 2015-08-16
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多