确定向量中相同邻接值的大小

时间:2013-05-29 14:53:36

标签: r

我有一个由0和1组成的向量。它指的是小时符合数据,0 =没有下雨,1 =相应小时内的下雨事件。

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

有什么比循环筛选所有值和neigthbours 1比1更好。

提前感谢您的帮助。 祝一切顺利, 文森特

1 个答案:

答案 0 :(得分: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内的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