我有一些降水数据,已经转换成二进制形式,其中1表示降水事件,0表示没有降水。该数据集有超过35,000个值,但这里是我的数据样例:
x = 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1.
我想要统计连续没有事件发生的天数,输出应该是这样的:
y = 2, 3, 6, 2.
我尝试使用帮助网站,但没有一个建议的解决方案起作用。
我有一些降水数据,已经转换成二进制形式,其中1表示降水事件,0表示没有降水。该数据集有超过35,000个值,但这里是我的数据样例:
x = 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1.
y = 2, 3, 6, 2.
我尝试使用帮助网站,但没有一个建议的解决方案起作用。
rle
。with(rle(x), lengths[!values])
#[1] 2 3 6 2
x1 <- x[Reduce(':',as.list(range(which(x==1))))]
with(rle(x1), lengths[!values])
diff(c(0, cumsum(!x)[diff(x) == 1]))
diff(x) == 1
表示在每个1前面的最后一个零,将返回TRUE
。 cumsum(!x)
返回一个向量,其中包含元素i
,该元素表示在x[i]
之前(包括x[i]
)x
中包含的零的数量。最后,您需要再次使用diff()
,因为您只需要自上一个1以来的零的数量。y <- c(0, 0, 0, x, 0, 0, 0, 0)
diff(c(0, cumsum(!c(y,1))[diff(c(y,1)) == 1]))