R 获取未过滤向量中元素的索引
我有一个来自向量的rle对象,希望在最大长度(值==TRUE)之前和之后获得长度之和(值==FALSE) 我可以做到:R 获取未过滤向量中元素的索引,r,vector,R,Vector,我有一个来自向量的rle对象,希望在最大长度(值==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
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
非常感谢你的帮助,
yasel这里有一个想法,它使用
data.table
中的rleid
来创建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
i14,data.table::rleid(se>4))
i2另一种可能的方法:
with(obj, {
i <- which(values & lengths==max(lengths))
c(sum(lengths[seq_len(i-1)]), sum(lengths[-seq_len(i)]))
})
我不确定我能完全理解你的意思。Sum1
是否等于您的obj
长度中的第一个8
和Sum2
是否等于3+1+3
。我用和(obj,max(长度[值])
找到的最大值是obj的第二个元素。所以它的左边只有另一个8,它是Sum1,右边有3+1+3,它给出了7作为Sum2
f1 <- function(x, size) {
i1 <- setNames(x > size, data.table::rleid(se > size))
i2 <- names(which.max(tapply(names(i1)[i1], names(i1)[i1], length)))
return(c(length(i1[names(i1) < i2]), length(i1[names(i1) > i2])))
}
f1(se, 4)
#[1] 8 7
with(obj, {
i <- which(values & lengths==max(lengths))
c(sum(lengths[seq_len(i-1)]), sum(lengths[-seq_len(i)]))
})
[1] 8 7