2015-06-10 65 views
2

參照這樣一個問題:轉換時間序列數據幀,矩陣,或者表

Transforming a time-series into a data frame and back

我有開始在2012年5月,並經過2015年五月看起來每月平均值列表這個最初:

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年和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 

我如何能解決影響我的月值和/或轉換順利我的TS對象爲數據幀,矩陣,或者表中的這些故障有什麼想法?

謝謝。

+0

您有浮點問題(時間爲一年+部分)和'floor'功能。請參閱http://stackoverflow.com/questions/4973462/r-best-way-to-convert-a-mts-to-a-non-time-series-dataframe-with-time-indexes – bergant

回答

0

你不需要時間序列,只是tapply:

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 
+0

我認爲保持它作爲一個列表,但我使用這種變化,它是完美的。謝謝! (AVG_LOSCAT2 $ AVG_LOSCAT,列表(年= AVG_LOSCAT2 $年,月= – rstunt