2016-07-09 15 views
0

私は毎年行列に分解した毎時の降雨データを持っています。行列はtenyr.matrix.listというリストにあります。降雨データを6時間のイベント間期間に基づいてイベントに分割したいと思っています。時系列データをR(繰り返し/ループ)でイベントに分割

以下のコードは私の試みです。私はマスクを使用して、次の0値またはイベントの終了と開始を定義するためのゼロではない次の値を識別しました。次に、イベントの終了から次のイベントの開始までの間に6時間の間隔があるまで、このプロセスを繰り返すためにリピートループを使用しました。

これは、イベントにギャップがない場合には機能しますが、ギャップがある場合、コードはイベントの終わりを以前の値ではなくゼロの値だけを出力します。

イベントが:

2006/12/12 07.00 5; 2006/12/12 08.00 10; 2006/12/12 09.00 7; 
2006/12/12 10.00 3; 2006/12/12 11.00 1. 

これがコードの内容です。しかし

イベントがある場合:

2006/12/12 07.00 5, 2006/12/12 08.00 0, 2006/12/12 09.00 7, 2006/12/12 
10.00 3, 2006/12/12 11.00 1. 

コードが印刷さゼロを超えた唯一の第二部:2006/12/12 09.00 7, 2006/12/12 10.00 3, 2006/12/12 11.00 1.

誰もが私が行方不明です何かを説明することはできますか?

+2

小さな代表データの例を教えてくださいまた、テキストを短くしてください!あなたの問題を知らない人があなたの質問に従うように例を挙げてください。 – Learner

+3

[Rで最小限の再現可能な例を提供する方法]を読んでください(http://stackoverflow.com/questions/5963269/how-to- make-a-great-r-reproducible-example#answer-5963610)を参照してください。それに応じて編集して改善してください。良い投稿は通常、*最小の入力データを提供し、望ましい出力データといくつかのコードが試行します - すべて*コピー貼り付け可能です*。また、適切なSO書式も使用します。ポスターはバラストを捨てるべきです。可能であれば、あなたの問題から抜粋して、あなたの元を最小限に抑えましょデータセットとコードを完全な再現性で保持しながら、一度に1つの問題に集中し、顕著な問題があることを確認します。 – lukeA

答えて

0

私は降雨データを30分の最小イベント間時間(MIT)に基づいてイベントに分解するためにはるかに簡単な方法を使用しました。ここに私のコードです:

# rainfall data contained in dataframe called RainData, of two columns: column 1 is time stamp in POSIXct format, column 2 is rainfall depth. My data is collected at two minute intervals. 

Rain_Over_0<- RainData[RainData[,2]!=0,] 

# Create vector increasing by 1 as Diff=>30 (Time specific) # change value of Diff here to change the MIT. 

Rainindex<-c(0,cumsum(diff(Rain_Over_0[,1])>30)) # input your value of MIT (in minutes) where the code says 30. 

# Split into list of events 

RainEvents<-split(Rain_Over_0, Rainindex) # this returns a list of events. You can then use sapply functions to determine the rain statistics you need. 

希望に役立ちます。

関連する問題