查找具有最大长度的条件子向量

时间:2016-04-07 17:11:00

标签: r vector count dplyr

我有一个二进制矢量

y <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0)

获得1的概率为p1 <- sum(y)/length(y)

获得0的概率是1-p1

我想找到y的子矢量z(比如说),其最大长度为:

z应该从1开始,只要得到1的概率q1(比如说​​),即sum(z)/length(z)总是大于或等于{{1} }。

任何帮助或线索都将不胜感激。

1 个答案:

答案 0 :(得分:0)

可能是一种更好的方法,这只是评估循环中的所有可能性:

p1 <- sum(y)/length(y)
mlth <- 0
ii <- 0
jj <- 0

for (i in 1:length(y)){
  if(y[i] == 1){
    for (j in i:length(y)){
      if(sum(y[i:j])/length(y[i:j]) > p1 && j - i + 1 >= mlth && j - i + 1 < length(y) ){
        mlth <- j - i + 1
        ii <- i
        jj <- j
      }
    }
  }
}
ii # start position
jj # end position
y[ii:jj] #the vector
相关问题