将时间序列转换为数据框、矩阵或 table

Converting time series to data frame, matrix, or table

参考这个问题:

Transforming a time-series into a data frame and back

我有一份从 2012 年 5 月开始到 2015 年 5 月的月度平均值列表。最初看起来像这样:

head (AVG_LOSCAT2)
    month AVG_LOSCAT YEAR MONTH
1 2012-05   5.342066 2012    05
2 2012-06   6.544096 2012    06
3 2012-07   6.448767 2012    07
4 2012-08   7.897919 2012    08
5 2012-09   8.908504 2012    09
6 2012-10   8.088083 2012    10

我这样做是为了将其转换为 ts 对象:

AVG_LOSCATSET<- AVG_LOSCAT2[, c(2)] 
AVG_LOSCATSET<-round(AVG_LOSCATSET,digits= 1)

现在看起来像这样:

AVG_LOS_CATSET
[1]  5.3  6.5  6.4  7.9  8.9  8.1 10.1 12.0 14.7 10.6  8.4  6.3  6.7
[14]  7.4  9.8  9.3 15.1 11.7 11.9 20.7 19.0  9.2 18.1  6.4  8.2  7.9
[27] 11.7 11.8  9.8 10.4  9.8 21.3 12.9 14.0  8.2  4.8 19.7   NA

我转换为时间序列以获得这个可爱的输出:

    AVG_LOSCATSET2<-ts(AVG_LOSCATSET,frequency = 12, start=c(2012,5))
    AVG_LOSCATSET2

      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2012                      5.3  6.5  6.4  7.9  8.9  8.1 10.1 12.0
2013 14.7 10.6  8.4  6.3  6.7  7.4  9.8  9.3 15.1 11.7 11.9 20.7
2014 19.0  9.2 18.1  6.4  8.2  7.9 11.7 11.8  9.8 10.4  9.8 21.3
2015 12.9 14.0  8.2  4.8 19.7   NA 

在这一点上,用它做任何事情都非常困难。我无法使用 ReporteRs 包将其放入报告中,因为它是一个 ts 对象。

这会将其转换为列表(我认为?):

tapply(AVG_LOSCATSET2, list(year = floor(time(AVG_LOSCATSET2)), month = month.abb[cycle(AVG_LOSCATSET2)]), c)

月份现在按字母顺序排列,2013 年 1 月的输出不稳定,2014 年 1 月似乎具有 2015 年 1 月的原始值,而 2015 年 1 月奇怪地为 NULL。

        month
year   Apr  Aug  Dec  Feb  Jan       Jul  Jun Mar  May  Nov  Oct  Sep 
  2012 NULL 7.9  12   NULL NULL      6.4  6.5 NULL 5.3  10.1 8.1  8.9 
  2013 6.3  9.3  20.7 10.6 Numeric,2 9.8  7.4 8.4  6.7  11.9 11.7 15.1
  2014 6.4  11.8 21.3 9.2  12.9      11.7 7.9 18.1 8.2  9.8  10.4 9.8 
  2015 4.8  NULL NULL 14   NULL      NULL NA  8.2  19.7 NULL NULL NULL

如果我使用数字而不是月份的缩写,我仍然会遇到同样的问题。

 tapply(AVG_LOSCATSET2, list(year = floor(time(AVG_LOSCATSET2)), month = cycle(AVG_LOSCATSET2)), c)

      month
year   1         2    3    4    5    6   7    8    9    10   11   12  
  2012 NULL      NULL NULL NULL 5.3  6.5 6.4  7.9  8.9  8.1  10.1 12  
  2013 Numeric,2 10.6 8.4  6.3  6.7  7.4 9.8  9.3  15.1 11.7 11.9 20.7
  2014 12.9      9.2  18.1 6.4  8.2  7.9 11.7 11.8 9.8  10.4 9.8  21.3
  2015 NULL      14   8.2  4.8  19.7 NA  NULL NULL NULL NULL NULL NULL

关于如何修复这些影响我的 Jan 值的故障的任何想法 and/or 顺利地将我的 ts 对象转换为数据框、矩阵或 table?

谢谢。

您不需要时间序列,只需点击:

res=tapply(AVG_LOSCAT2$AVG_LOSCAT, list(year = AVG_LOSCAT2$YEAR, month = AVG_LOSCAT2$MONTH), round,2)
res 
      month
year      1    2    3    4    5    6    7    8    9   10   11   12
  2012   NA   NA   NA   NA   NA 7.51 7.31 8.33 7.66 5.36 6.46 8.30
  2013 5.74 7.89 6.49 7.09 5.91 6.31 8.24 6.73 8.56 8.19 6.54 6.49
  2014 8.03 6.80 6.25 7.10 5.38 6.21 7.78 8.87 6.62 6.09 8.40 8.37
  2015 8.00 5.73 6.32 6.71 6.32 6.75   NA   NA   NA   NA   NA   NA