通过变量在1s和group之间计数0
我有一些降水数据,我转换成二进制,其中1=降水事件,0=无降水。数据集有35000多个值,但以下是我的数据的示例:通过变量在1s和group之间计数0,r,R,我有一些降水数据,我转换成二进制,其中1=降水事件,0=无降水。数据集有35000多个值,但以下是我的数据的示例: x = c(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 = c(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
x = c(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 = c(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.
我得到了以下答案,非常有效:
with(rle(x), length[!values])
#[1] 2 3 6 2
如果向量末尾有“0”,则可以从
从第一个1到最后一个1
x1 <- x[Reduce(':',as.list(range(which(x==1))))]
with(rle(x1), lengths[!values])
根据您之前的回答,您可能只需要使用tapply函数。答案可能会返回一个列表
tapply(data$Event,list(data$Year),
FUN=function(x) with(rle(x[Reduce(':',as.list(range(which(x==1))))]),lengths[!values]))
或者如果您已经完成了数据操作
tapply(data$Event,list(data$Year), FUN=function(x) with(rle(x),lengths[!values]))
我们可以使用
data.table
library(data.table)
setDT(df1)[,{x1 <- Event[Reduce(':',as.list(range(which(Event==1))))]
with(rle(x1), lengths[!values]) }, Year]
# Year V1
#1: 1916 3
#2: 1916 3
#3: 1917 1
库(data.table)
setDT(df1)[,{x1aggregate(事件~年份,数据=mydf,函数(x)与(rle(x),长度[!值]))
?A