我有一個由0和1組成的向量。它指小時遇見的數據,其中0 =無雨,1 =相應小時內的雨事件。確定向量中相同鄰接點值的大小
目標是確定所有降雨事件的持續時間,即矢量中每塊1的長度。
預先比循環篩選的所有值和neigthbours 1有什麼更好的通過1
感謝您的幫助。 全部最好, Vincent
我有一個由0和1組成的向量。它指小時遇見的數據,其中0 =無雨,1 =相應小時內的雨事件。確定向量中相同鄰接點值的大小
目標是確定所有降雨事件的持續時間,即矢量中每塊1的長度。
預先比循環篩選的所有值和neigthbours 1有什麼更好的通過1
感謝您的幫助。 全部最好, Vincent
正如@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
@Joran:的確我開始喜歡這個rle功能 – allardvinc
@馬修非常感謝你的明確答案。你甚至可以預見我的需求!一切順利,文森特 – allardvinc
@allardvinc不客氣。請記得接受答案,以便問題得到解決。謝謝。 –
我真的認爲你會喜歡函數'rle'。 – joran
@joran,這絕對是值得的。 – huon
@dbaupp這個問題沒有可用的代碼,當我唯一的答案是命名一個函數時,我傾向於留下一個評論,讓其他人花時間構造更詳細的答案。 – joran