【问题标题】:How to convert a multi variate time series object to a data frame?如何将多元时间序列对象转换为数据框?
【发布时间】:2020-06-25 10:45:03
【问题描述】:

我想做这个问题中解释的反向操作:convert data frame with date column to time series

例如二氧化碳数据的分解是一个多变量时间序列:

m <- decompose(co2)
> str(m)
List of 6
 $ x       : Time-Series [1:468] from 1959 to 1998: 315 316 316 318 318 ...
 $ seasonal: Time-Series [1:468] from 1959 to 1998: -0.0536 0.6106 1.3756 2.5168 3.0003 ...
 $ trend   : Time-Series [1:468] from 1959 to 1998: NA NA NA NA NA ...
 $ random  : Time-Series [1:468] from 1959 to 1998: NA NA NA NA NA ...
 $ figure  : num [1:12] -0.0536 0.6106 1.3756 2.5168 3.0003 ...
 $ type    : chr "additive"
 - attr(*, "class")= chr "decomposed.ts"

如何将此多变量时间序列对象转换为具有日期列的数据框?

如果可能,无需安装新软件包。

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    您可以尝试以下方法:

    library(xts)
    
    m <- decompose(co2)
    str(m)
    #> List of 6
    #>  $ x       : Time-Series [1:468] from 1959 to 1998: 315 316 316 318 318 ...
    #>  $ seasonal: Time-Series [1:468] from 1959 to 1998: -0.0536 0.6106 1.3756 2.5168 3.0003 ...
    #>  $ trend   : Time-Series [1:468] from 1959 to 1998: NA NA NA NA NA ...
    #>  $ random  : Time-Series [1:468] from 1959 to 1998: NA NA NA NA NA ...
    #>  $ figure  : num [1:12] -0.0536 0.6106 1.3756 2.5168 3.0003 ...
    #>  $ type    : chr "additive"
    #>  - attr(*, "class")= chr "decomposed.ts"
    
    df <- as.data.frame(m[c("x", "seasonal", "trend", "random")])
    str(df)
    #> 'data.frame':    468 obs. of  4 variables:
    #>  $ x       : Time-Series  from 1959 to 1998: 315 316 316 318 318 ...
    #>  $ seasonal: Time-Series  from 1959 to 1998: -0.0536 0.6106 1.3756 2.5168 3.0003 ...
    #>  $ trend   : Time-Series  from 1959 to 1998: NA NA NA NA NA ...
    #>  $ random  : Time-Series  from 1959 to 1998: NA NA NA NA NA ...
    
    df2 <- data.frame(date = index(m$x), 
                      apply(df, 2, as.numeric))
    str(df2)
    #> 'data.frame':    468 obs. of  5 variables:
    #>  $ date    : num  1959 1959 1959 1959 1959 ...
    #>  $ x       : num  315 316 316 318 318 ...
    #>  $ seasonal: num  -0.0536 0.6106 1.3756 2.5168 3.0003 ...
    #>  $ trend   : num  NA NA NA NA NA ...
    #>  $ random  : num  NA NA NA NA NA ...
    

    reprex package (v0.3.0) 于 2020-03-13 创建

    你也可以试试tsibblefeasts

    library(xts)
    library(tsibble)
    library(feasts)
    
    m <- decompose(co2)
    
    as_tsibble(co2) %>% 
      model(decomp = classical_decomposition(value, type = "additive")) %>%
      components() 
    #> # A dable:                 468 x 7 [1M]
    #> # Key:                     .model [1]
    #> # Classical Decomposition: value = trend + seasonal + random
    #>    .model    index value trend seasonal  random season_adjust
    #>    <chr>     <mth> <dbl> <dbl>    <dbl>   <dbl>         <dbl>
    #>  1 decomp 1959 Jan  315.   NA   -0.0536 NA               315.
    #>  2 decomp 1959 Feb  316.   NA    0.611  NA               316.
    #>  3 decomp 1959 Mär  316.   NA    1.38   NA               315.
    #>  4 decomp 1959 Apr  318.   NA    2.52   NA               315.
    #>  5 decomp 1959 Mai  318.   NA    3.00   NA               315.
    #>  6 decomp 1959 Jun  318    NA    2.33   NA               316.
    #>  7 decomp 1959 Jul  316.  316.   0.813  -0.284           316.
    #>  8 decomp 1959 Aug  315.  316.  -1.25   -0.0170          316.
    #>  9 decomp 1959 Sep  314.  316.  -3.05    0.758           317.
    #> 10 decomp 1959 Okt  313.  316.  -3.25    0.362           316.
    #> # … with 458 more rows
    

    reprex package (v0.3.0) 于 2020-03-13 创建

    【讨论】:

    • 这对您有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 2020-06-21
    • 2021-09-23
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多