获取未过滤向量中元素的索引

时间:2019-01-16 09:34:36

标签: r vector

我有一个来自矢量的rle对象,想获得最大长度(值== TRUE)前后的长度总和(值== TRUE和值== FALSE)

我可以做到的:

se <- c(3,1,2,3,1,2,3,4,5,6,5,8,9,9,9,5,4,3,4,5,4,3,2)
obj <- rle(se > 4)

obj

Run Length Encoding
  lengths: int [1:5] 8 8 3 1 3
  values : logi [1:5] FALSE TRUE FALSE TRUE FALSE

#Getting the maximum with values == True
with(obj, max(lengths[values]))

8

但是现在我不确定如何继续。..如果我尝试通过match()找到最大的8,我首先会找到具有== FALSE值的元素,而我不能依靠没有其他长度= 8,值== FALSE,即我要查找的最大值。

对于显示的示例,预期结果将是:

Sum1 = 8 
Sum2 = 7

非常感谢您的帮助, yasel

2 个答案:

答案 0 :(得分:2)

这是一个使用const _validators = { property_a: (value) => true, get property_b() { const { ClassB } = require('./ClassB'); return ClassB.VALIDATORS.property_b; } }; // and vice versa 中的rleid来创建data.table组(即

)的想法
TRUE/FALSE

您也可以使其成为函数,

i1 <- setNames(se > 4, data.table::rleid(se > 4))
i2 <- names(which.max(tapply(names(i1)[i1], names(i1)[i1], length)))
sum1 <- length(i1[names(i1) < i2])
sum2 <- length(i1[names(i1) > i2])
sum1
#[1] 8
sum2
#[1] 7

答案 1 :(得分:1)

另一种可能的方法:

with(obj, {
    i <- which(values & lengths==max(lengths))
    c(sum(lengths[seq_len(i-1)]), sum(lengths[-seq_len(i)]))
    })

输出:

[1] 8 7