参考这个问题:
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对象平滑地转换为数据框,矩阵或表的任何想法?
谢谢。
答案 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