2013-05-29 38 views
1

我有一個由0和1組成的向量。它指小時遇見的數據,其中0 =無雨,1 =相應小時內的雨事件。確定向量中相同鄰接點值的大小

目標是確定所有降雨事件的持續時間,即矢量中每塊1的長度。

預先比循環篩選的所有值和neigthbours 1有什麼更好的通過1

感謝您的幫助。 全部最好, Vincent

+4

我真的認爲你會喜歡函數'rle'。 – joran

+0

@joran,這絕對是值得的。 – huon

+0

@dbaupp這個問題沒有可用的代碼,當我唯一的答案是命名一個函數時,我傾向於留下一個評論,讓其他人花時間構造更詳細的答案。 – joran

回答

3

正如@joran所示,rle就是你想要的。

hourly.rain <- c(0, 0, 1, 1, 0, 1, 0, 0, 1, 1) 
with(rle(hourly.rain), lengths[values == 1]) 
#[1] 2 1 2 

如果你想觀察的事件之間的時間,比如2小時(即2小時或更少分離事件被認爲是同一事件),您還可以使用rle來代替內的那些0事件期間爲1秒。

inter.event <- 2 
hourly.rain <- c(0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1) 
with(rle(hourly.rain), { 
     fwd.lag <- c(head(values, -1), 1) 
     bkwd.lag <- c(1, tail(values, -1)) 
     replace.vals <- values == 0 & lengths <= inter.event & fwd.lag == bkwd.lag 
     rep(replace(values, replace.vals, 1) , lengths) 
}) 
# [1] 0 0 0 1 1 1 1 0 0 0 1 1 1 1 
+0

@Joran:的確我開始喜歡這個rle功能 – allardvinc

+0

@馬修非常感謝你的明確答案。你甚至可以預見我的需求!一切順利,文森特 – allardvinc

+0

@allardvinc不客氣。請記得接受答案,以便問題得到解決。謝謝。 –

相關問題