【问题标题】:Converting time series to data frame, matrix, or table将时间序列转换为数据框、矩阵或表格
【发布时间】:2015-06-10 22:39:26
【问题描述】:

参考这个问题:

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 对象平滑转换为数据框、矩阵或表格的任何想法?

谢谢。

【问题讨论】:

标签: r time-series tapply


【解决方案1】:

您不需要时间序列,只需轻按即可:

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

【讨论】:

  • 我认为它保留了一个列表,但我使用了这个变体,它很完美。谢谢! AVG_LOSCATSET
猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 2018-11-04
  • 1970-01-01
相关资源
最近更新 更多