2012-05-08 69 views
6

我正在對無序文件進行小時降水分析。不過,我設法把它清理乾淨,並將其存儲在數據框(稱爲CA1),它採用的形式如下:R中的時間序列和stl:只允許單變量系列的誤差

Station_ID Guage_Type Lat Long  Date Time_Zone Time_Frame H0 H1 H2 H3 H4 H5  H6  H7  H8  H9  H10  H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 
1 4457700   HI 41.52 124.03 1948-07-01   8  LST 0 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
2 4457700   HI 41.52 124.03 1948-07-05   8  LST 0 1 1 1 1 1 2.0000000 2.0000000 2.0000000 4.0000000 5.0000000 5.0000000 4 7 1 1 0 0 10 13 5 1 1 3 
3 4457700   HI 41.52 124.03 1948-07-06   8  LST 1 1 1 0 1 1 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
4 4457700   HI 41.52 124.03 1948-07-27   8  LST 3 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
5 4457700   HI 41.52 124.03 1948-08-01   8  LST 0 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
6 4457700   HI 41.52 124.03 1948-08-17   8  LST 0 0 0 0 0 0 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 6 1 0 0 0 0 0 0 0 0 0 0 

凡H0通過H23代表每天24小時(行)

使用僅CA1(上面的數據幀),I取的24點的每一天(行)和垂直方向轉置它並連接所有的剩餘天數(行)到一個變量,我稱之爲DAT1:

> dat1[1:48,] 
    H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 2 2 2 4 5 5 4 7 1 1 0 0 10 13 5 1 1 3 

使用可變DAT1 ,我輸入它作爲參數來獲取時間序列數據:

> rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon), 
    frequency = 24) 

甲幾點注意事項:

>dim(CA1) 
    [1] 5636 31 
>length(dat1) 
    [1] 135264 

因此5636 * 24(總的數據點[24]每行)= 135264總點數。 長度(rainCA1)與上述要點一致。但是,如果我把一個結束的TS功能,如

>rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon), 
    end = c(1900+as.POSIXlt(CA1[5636,5])$year, 1+as.POSIXlt(CA1[5636,5])$mon), 
    frequency = 24) 

我得到1134分的總長度,我在哪裏丟失了大量的數據。我假設這是由於日期不是連續的,因爲我只是將月份和年份作爲起點的參數。

繼續,在我認爲是正確的路徑,使用第一TS計算沒有結束的說法,我提供它作爲STL輸入:

>rainCA1_2 <-stl(rainCA1, "periodic") 

不幸的是,我得到一個錯誤:

Error in stl(rainCA1, "periodic") : only univariate series are allowed 

我不明白或如何去做。但是,如果我返回到ts函數並提供結束參數,stl可以正常工作,不會出現任何錯誤。

我在很多論壇上都有過研究,但是沒有人(或者我的理解)提供了一個很好的解決方案來獲得小時數據的數據屬性。如果有人可以幫助我,我會高度讚賞它。謝謝!

回答

7

該錯誤是數據形狀的結果。嘗試> dim(rainCA1);我懷疑它給了像> [1] 135264 1。 替換rainCA1 <- ts(dat1 ...rainCA1 <- ts(dat1[[1]] ...,它應該工作。

它是否正確,我想知道...... 在我看來,您的第一筆業務就是獲取一致格式的數據。確保ts()獲得正確的輸入。檢查ts的精確規格。

ts()不解釋日期時間格式。 ts()需要固定時間間隔的連續數據點。它使用一個大型計數器和一個小型計數器(其中frequency適合一個主要計數器)。例如,如果您的數據是每小時,並且您希望在每日級別上有季節性,則frequency等於24。因此,startend主要是化妝品:start僅僅表示主要計數器的t(0),而end表示t(結束)。

0

一個解決方案,我發現是time_series_var <- ts(data[, c("var_of_interest")])然後time_series_var <- ts(as.vector(time_series_var)),然後由於尺寸現在正確,與單變量相關的錯誤消失。

相關問題