私は100年(1200データポイント)の月データと月の列と年のデータフレームを持っています。私はそれを毎月の時系列に変換したいと思っています。私はいくつかの方法を試しましたが、どちらも正しい「時間的」な構造を作りませんでした。データフレームを毎月の時系列に変換する
問題は、データフレームを12の変数(月)の100の観測値(年)とみなしてRにあります。ここに私の最新の試みのための再現性のあるコードです:「dummy.df.ts」で
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)
は、オブジェクト、行と列が列にシーケンシャル観測の代わりに切り替えるとしている、などのすべてのjanuarysのfebruarysが一緒に積層されます1つずつどのようにして正しい時間構造を得ることができますか?
fr.monthly.temp.sample.ts <- ts(as.vector(as.matrix(fr.monthly.temp.sample)), start=c(1901,1), end=c(1905,12), frequency=12)
これがある: - :
私のデータの一例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()呼び出しを使用して、これらは1901年から毎月の温度値は、出力私は時系列オブジェクトのために得る:
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
--Note変更時間構造(列の値が行になりました...) -
感謝。
私は自分の答えを編集しました。私は実際には 'plot'で表示されるデータのcolとrowの間でこの"切り替え "を経験しません。たぶん2年ほど前のデータサンプルを使ってより良い回答を得ることができます。 – Michele
オリジナルのデータとプロットを追加して、値の順序が正しくないことを示しました。あなたのEDIT 1の解決策は私に私が望むものではない多変量の時系列を与えます、私はさらなる処理のための単変量シリーズとしてそれを保持したいと思います。EDIT 2のために、私は同じ理由でas.vector()発注の問題を引き起こしている操作です。おそらく@Alexanderによって投稿された解決策#1が動作するでしょう、私はまだそれを試しなければなりません.. – avg
私の編集1は解決策ではありませんでした...それはちょうどts()の仕組みを認識することでした。私の編集2は、ベクトルの中のデータが既に存在することから始まりました...私はあなたがトランスポーズを必要としていることに気付きませんでした... 'round(seq(5,10、length.out = 24)、1)'はベクトル。答えのために – Michele