将时间序列转换为数据框,矩阵或表

时间:2015-06-10 22:39:26

标签: r time-series tapply

参考这个问题:

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值和/或将我的ts对象平滑地转换为数据框,矩阵或表的任何想法?

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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