18

整理されていないファイルで毎時降水量の分析を行っています。しかし、私はそれをクリーンアップして、次のような形式をとるデータフレーム (CA1 と呼ばれる) に保存することができました。

  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 は 1 日あたり 24 時間を表します (行)

CA1 (上記のデータフレーム) のみを使用して、24 ポイントの各日 (行) を取得し、それを垂直方向に転置し、残りの日 (行) を 1 つの変数に連結します。これを 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 関数に戻って end 引数を指定すると、stl はエラーなしで正常に動作します。

私は多くのフォーラムで調査しましたが、誰も (または私の理解では) 毎時データのデータ属性を取得するための適切なソリューションを提供していません。誰かが私を助けることができれば、私はそれを高く評価します。ありがとうございました!

4

4 に答える 4

12

そのエラーは、データの形状の結果です。試してみてください> dim(rainCA1)。のようなものを与えるのではないかと思い> [1] 135264 1ます。に置き換えるrainCA1 <- ts(dat1 ...rainCA1 <- ts(dat1[[1]] ...、動作するはずです。

それが正しく行われるかどうか、私は疑問に思います...あなたの最初の仕事は、一貫したフォーマットのデータを取得することだと私には思えます。ts()正しい入力が得られることを確認してください。の正確な仕様を確認してくださいts

ts()日時形式を解釈しません。ts()固定間隔の連続したデータ ポイントが必要です。メジャー カウンターとマイナー カウンター (そのうちfrequency1 つのメジャー カウンターに収まる) を使用します。たとえば、データが時間単位で、日次レベルで季節性があると予想される場合、frequencyは 24 に等しいstartためend、 は主に表面的startなものです。主要なカウンターの t(0) を示すだけで、endt(終了) を示します。

于 2012-06-18T16:13:24.580 に答える
1

私が見つけた1つの解決策はtime_series_var <- ts(data[, c("var_of_interest")])time_series_var <- ts(as.vector(time_series_var))寸法が正しくなったため、一変量に関連するエラーが消えてしまうことです。

于 2017-06-13T19:00:21.033 に答える