如何计算R中1与1之间的0数?

如何计算R中1与1之间的0数?,r,R,我有一些降水数据,我转换成二进制,其中1=降水事件,0=无降水。数据集有35000多个值,但以下是我的数据的示例: 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. 我想计算连续无事件天数,因此我的输出如下所示: 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=无降水。数据集有35000多个值,但以下是我的数据的示例:

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.
我想计算连续无事件天数,因此我的输出如下所示:

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
如果向量末尾有“0”,则可以从第一个1到最后一个1开始计数

x1 <- x[Reduce(':',as.list(range(which(x==1))))]
with(rle(x1), lengths[!values]) 

x1这是一个有点复杂的解决方案(但我觉得很有趣):

diff(x)=1
给出一个1之前最后一个0的
TRUE
cumsum(!x)
为您提供了一个向量,该向量包含
i
元素
x
中包含的零的数量,直到并包括
x[i]
。最后,您还需要
diff()
,因为您只需要自上一个零开始的零数

该解决方案使用前导零,但在结尾使用零时失败。通过确保最后一个数字始终为1,可以对其进行调整,以适应后一种情况:

y <- c(0, 0, 0, x, 0, 0, 0, 0)
diff(c(0, cumsum(!c(y,1))[diff(c(y,1)) == 1]))

我不明白。这个问题怎么会太宽泛了?