我有一個100年(1200個數據點)的月數據的數據框,行和列中的月份在行中。我想將它轉換爲每月的時間序列,我嘗試了幾種方法,但都沒有創建正確的「時間」結構。將數據幀轉換爲月度時間序列
問題在於R將數據框視爲100個12個變量(月)的觀察值(年)。這裏是我的最新嘗試可重複碼:
set.seed(12)
dummy.df <- as.data.frame(matrix(round(rnorm(1200),digits=2),nrow=100,ncol=12))
rownames(dummy.df) <- seq(from=1901, to=2000)
colnames(dummy.df) <- c("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec")
dummy.df.ts <- ts(as.vector(as.matrix(dummy.df)), start=c(1901,1), end=c(2000,12), frequency=12)
在「dummy.df.ts」對象的行和列在列順序意見交換,而是所有的januarys februarys等堆疊在一起一個接一個地。我怎樣才能達到正確的時間結構?
我的數據的一個例子:這是從1901年每月的溫度值 - 1905年
fr.monthly.temp.sample
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
1901 2.7 0.4 4.7 10.0 13.0 16.9 19.2 18.3 15.7 10.6 4.9 3.5
1902 4.1 3.2 7.5 10.3 10.0 15.1 18.2 17.4 15.0 10.2 6.3 3.5
1903 3.8 5.9 7.6 7.1 12.9 14.9 17.6 17.3 15.5 12.1 6.9 2.7
1904 3.0 4.6 5.5 10.3 13.6 16.3 20.2 18.5 13.9 11.2 5.4 4.8
1905 1.7 4.0 7.4 9.3 11.9 16.5 20.0 17.6 14.7 8.4 5.5 3.8
,並通過使用該TS()調用:
fr.monthly.temp.sample.ts <- ts(as.vector(as.matrix(fr.monthly.temp.sample)), start=c(1901,1), end=c(1905,12), frequency=12)
這是輸出我得到的時間序列對象:
fr.monthly.temp.sample.ts
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1901 2.7 4.1 3.8 3.0 1.7 0.4 3.2 5.9 4.6 4.0 4.7 7.5
1902 7.6 5.5 7.4 10.0 10.3 7.1 10.3 9.3 13.0 10.0 12.9 13.6
1903 11.9 16.9 15.1 14.9 16.3 16.5 19.2 18.2 17.6 20.2 20.0 18.3
1904 17.4 17.3 18.5 17.6 15.7 15.0 15.5 13.9 14.7 10.6 10.2 12.1
1905 11.2 8.4 4.9 6.3 6.9 5.4 5.5 3.5 3.5 2.7 4.8 3.8
- 注改變的時間結構(從列中的值現在是在排..) -
感謝。
我編輯了我的答案。我實際上並沒有體驗到由'plot'顯示的數據中的cols和rows之間的「切換」。也許你可以使用你的數據樣本,僅僅幾年,併發布你得到的圖表,得到更好的答案。 – Michele 2013-04-27 10:43:03
我已經添加了我的原始數據和圖表,以顯示錯誤的值排序。你的編輯1解決方案給我一個多變量的時間序列,這不是我想要的,我想保留它作爲一個單變量系列進一步處理..至於編輯2,我試圖as.vector()出於同樣的原因,但是導致訂購問題的操作。也許@Alexander發佈的解決方案#1將工作,我仍然必須嘗試.. – avg 2013-04-27 12:37:23
我的編輯1不是一個解決方案......它只是爲了瞭解ts()如何工作。我的編輯2以矢量數據ALREADY開始......我沒有意識到你只需要一個轉置......'round(seq(5,10,length.out = 24),1)'是一個矢量。 – Michele 2013-04-27 13:07:07