我从每天的风速时间序列开始。我想检查在两个时间段之间的某个阈值变化下连续天数的平均值和最大值。这就是我所取得的成就:我将数据细分为值低于阈值的行,并确定连续的天数。
我现在有一个数据帧,看起来像这样:
dates consecutive_days
1970-03-25 NA
1970-04-09 TRUE
1970-04-10 TRUE
1970-04-11 TRUE
1970-04-12 TRUE
1970-04-15 FALSE
1970-05-08 TRUE
1970-05-09 TRUE
1970-05-13 FALSE
我接下来要做的是找到连续"TRUE"参数的最大和平均长度。(在这种情况下为:最大值=4;平均值=3)。
这里有一个使用rle
:的方法
# construct sample data.frame:
set.seed(1234)
df <- data.frame(days=1:12, consec=sample(c(TRUE, FALSE), 12, replace=T))
# get rle object
consec <- rle(df$consec)
# max consecutive values
max(consec$lengths[consec$values==TRUE])
# mean consecutive values
mean(consec$lengths[consec$values==TRUE])
引用?rle
、rle
计算向量中相等值的游程的长度和值
我们保存结果,然后子集为连续的TRUE观测值,以计算平均值和最大
你可以很容易地将其组合成一个函数,或者简单地将上面的结果连接起来:
myResults <- c("max"=max(consec$lengths[consec$values==TRUE]),
"mean"= mean(consec$lengths[consec$values==TRUE]))