我有一个来自矢量的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
答案 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