我有一个二进制矢量
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} }。
任何帮助或线索都将不胜感激。
答案 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