2017-11-30 29 views
-1

データフレーム(DF)には複数の列がありますが、対象列は日付、インデックス、サイトです。 サブセット表はこちらです:時系列は、年のための23回の観測で353 JD 2015年に2006ユリウス日1に開始および終了https://www.dropbox.com/s/48165ey5rsv628c/DATA.csv?dl=0列内の各名前値の時系列をどのように分解し、すべてをテーブルにエクスポートするのですか

SITE date  index 
A  2006.001 0.394 
A  ..   1.408 
A  2015.353 1.295 
B  2006.001 0.176 
B  ..   2.354 
B  2015.353 0.417 
C  2006.001 0.232 
C  ..   1.733 
C  2015.353 0.653 

INDEX_TS <- ts(DF$index, start = c(2006,1), end = c(2015,23), frequency = 23) 

次に、それをstlとobteinで分解し、各日付の季節、傾向、および残余を分析します。表にseasonaltrendremainderを抽出する

stl(INDEX_TS, 12) 

Call: 
stl(x = INDEX_TS, s.window = 12) 

Components 
Time Series: 
Start = c(2008, 18) 
End = c(2017, 16) 
Frequency = 23 
      seasonal  trend remainder 
2006.000 0.244352688 0.9678620 -0.34804205 
...  ...   ...  ... 
2015.957 0.191399568 1.5224135 0.57215711 

STL12 <- stl(INDEX_TS, 12) 
DF_STL <- data.frame(STL12, INDEX_TS$time.series) 

しかし、唯一の指標、季節、トレンドおよび残りDFもたらします。

各サイトごとに別々に行うことができます。それぞれのサイトでDFをサブセット化できますが、実際のDFにはさまざまなサイト名があります。以下のことを試してみてください

SITE date  index seasonal trend  remainder 
A  2006.001 0.394 x1  y1  z1 
A  ..   1.408 x2  y2  z2 
A  2015.353 1.295 x3  y3  z3 
B  2006.001 0.176 x4  y4  z4 
B  ..   2.354 x5  y5  z5 
B  2015.353 0.417 x6  y6  z6 
C  2006.001 0.232 x7  y7  z7 
C  ..   1.733 x8  y8  z8 
C  2015.353 0.653 x9  y9  z9 
+0

@useR言い訳my redaction –

+0

@useRそれぞれのサイトが異なる動作をするため、各サイトは同じ日付で異なる分解値を持つため、各サイトを別々に分解したいと考えています。 –

答えて

0

:私が必要とする

最終DFはデように、各サイトの値を分解して1です。このsplitのデータフレームはSITEで、indexをそれぞれSITEに格納し、ts,decomposeとし、元のサブセットと結合します。

再現例:

AirData = data.frame(AirPassengers, SITE = rep(c("A", "B", "C"), each = 48)) 

do.call(rbind, lapply(split(AirData, AirData$SITE), function(x) { 
    INDEX_TS <- ts(x$AirPassengers, frequency = 12) 
    STL12 <- stl(INDEX_TS, 12)$time.series 
    return(data.frame(x, STL12)) 
})) 

結果:

 AirPassengers SITE seasonal trend remainder 
A.1   112 A -13.986104 123.5683 2.4177707 
A.2   118 A -7.759212 124.1061 1.6531607 
A.3   132 A 8.325181 124.6438 -0.9689496 
A.4   129 A -1.887274 125.1815 5.7057890 
A.5   121 A -5.517268 125.7871 0.7302135 
A.6   135 A 12.098461 126.3926 -3.4910836 
A.7   148 A 27.559203 126.9982 -6.5573953 
A.8   148 A 28.502489 127.5898 -8.0922545 
A.9   136 A 9.726413 128.1813 -1.9077517 
A.10   119 A -12.472175 128.7729 2.6992637 
A.11   104 A -31.553871 129.7343 5.8195429 
A.12   118 A -13.061798 130.6957 0.3660530 
A.13   115 A -13.978583 131.6572 -2.6785793 
A.14   126 A -7.772715 133.1337 0.6389980 
A.15   141 A 8.281701 134.6103 -1.8919729 
A.16   135 A -2.206362 136.0868 1.1195345 
A.17   125 A -5.580592 137.8077 -7.2271040 
A.18   149 A 12.368207 139.5286 -2.8967712 
A.19   170 A 27.747586 141.2494 1.0029824 
A.20   170 A 28.926157 143.7331 -2.6593066 
...   ... ...  ...  ...  ... 

OPの例:

最後に、 do.call rbindのすべてのサブセット+ decopositions最終データフレームの中へ
+0

'ts(x $ LAI、start = c(2006、1)、end = c(2017,17)、frequency = 23)のエラー: 'ts'オブジェクトには1つ以上の観測値が必要です ' 便利だがエラーが出る –

+0

@OSCAR_P各 'SITE'は同じ数の観測をしていますか?実行したこのコードは、私のソリューションのコードと同じではありません。また、 'dput(DF) 'の出力をコピーしてあなたの質問に貼り付けることで、再現可能な例を提供してください。 – useR

+0

それを修正しました。事実上、この例は非常にうまく動作していますが、主な違いはAirDataテーブルにあります。今度は 'stl(INDEX_TS、12)のエラー:外部関数呼び出し(arg 1)のNA/NaN/Inf 呼び出し元:stl(INDEX_TS、12)' –

関連する問題