1

我有一个由 0 和 1 组成的向量。它指的是每小时遇到的数据,0 = 无雨,1 = 相应小时内的降雨事件。

目标是确定所有降雨事件的持续时间,即向量中每个 1 块的长度。

有什么比循环筛选所有值和邻居 1 比 1 更好的方法。

在此先感谢您的帮助。一切顺利,文森特

4

1 回答 1

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 小时或更短的事件被视为同一事件),您还可以使用rle1 替换事件间期间内的那些 0。

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
于 2013-05-29T14:59:04.180 回答