Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 获取未过滤向量中元素的索引_R_Vector - Fatal编程技术网

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

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

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

#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