rle():仅当值== TRUE时返回长度的平均值

时间:2016-12-06 17:23:00

标签: r

我有以下的rle对象:

Run Length Encoding
  lengths: int [1:189] 4 5 3 15 6 4 9 1 9 5 ...
  values : logi [1:189] FALSE TRUE FALSE TRUE FALSE TRUE ...

如果值中的相应项目== TRUE,我想找到长度的平均值(平均值)(当值== FALSE时,我对长度不感兴趣)

df <- data.frame(values = NoOfTradesAndLength$values, lengths = NoOfTradesAndLength$lengths)
AveLength <- aggregate(lengths ~ values, data = df, FUN = function(x) mean(x))

返回此内容:

  values  lengths
1  FALSE 7.694737
2   TRUE 5.287234

我现在可以获得值== TRUE的长度但是有更好的方法吗?或者,也许,我可以在不使用rle的情况下获得类似的结果吗?感觉从列表到数据帧的转换有点繁琐,我确信有一种巧妙的方法可以做到这一点。我已经看到这个问题的衍生物已经循环过去,但是我无法从中获得更好的东西,所以我们非常感谢你的帮助。

1 个答案:

答案 0 :(得分:4)

rle会返回list'长度'和'值'。我们可以使用'values'作为逻辑索引对'length'进行子集化,并得到mean

with(NoOfTradesAndLength, mean(lengths[values])) 

使用可重现的例子

set.seed(24)
NoOfTradesAndLength <- rle(sample(c(TRUE, FALSE), 25, replace=TRUE))
with(NoOfTradesAndLength, mean(lengths[values]))
#[1] 1.5

使用OP的代码

AveLength[2,]
#  values lengths
#2   TRUE     1.5