找出连续" TRUE" -arguments的最大长度和平均长度

时间:2016-05-20 11:43:16

标签: r string-length

我从每日时间序列的风速开始。我想检查两个时间段之间某个阈值变化下的连续天数的平均值和最大值。这就是我已经走了多远:我将数据子集化为值低于阈值并确定连续几天的行。

我现在有一个如下所示的数据框:

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" -arguments的最大长度和平均长度。 (在这种情况下,最大值= 4;平均值= 3)。

1 个答案:

答案 0 :(得分:1)

以下是使用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])

引自?rlerle

  

计算[s]矢量

中相等值运行的长度和值

我们保存结果,然后将子集连接到连续的TRUE观察值,以计算平均值和最大值

您可以轻松地将其组合成一个函数,或者简单地连接上面的结果:

myResults <- c("max"=max(consec$lengths[consec$values==TRUE]), 
               "mean"= mean(consec$lengths[consec$values==TRUE]))