【问题标题】:Finding Conditional Subvector with Maximum Length查找具有最大长度的条件子向量
【发布时间】:2016-04-07 17:10:59
【问题描述】:

我有一个二元向量

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 &lt;- sum(y)/length(y)

得到0的概率是1-p1

我想找到一个具有最大长度的 y 的子向量 z(比如):

z应该从1开始,只要得到1的概率就让后面的进入,q1(比如说),即sum(z)/length(z)应该总是大于等于p1

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

【问题讨论】:

  • 这不总是完整的向量吗?它是最大长度,等于 p1
  • 亲爱的 Chris,它并不总是完整的向量,看看你是否取了 y &lt;-c(1,0,0,0,0,0,0,1,1,1,1) 然后 p1=0.4545 并且所需的 z 应该从第 8 个条目开始,它将是 c(1,1,1,1 )。
  • 对,但是 c(1,0,0,0,0,0,0,1,1,1,1)c(1,1,1,1) 长,并且 >= p1,所以这两个条件都为真,不是吗?
  • 实际上,从技术上讲,如果第一个数字是一个,它只是整个向量。否则它会变得更有趣
  • 是的,实际上我必须说 z 是适当的子向量,因为全向量是一个明显的例子。

标签: r vector count dplyr


【解决方案1】:

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

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

【讨论】:

  • 亲爱的克里斯,这实际上很有趣。当应用于y &lt;- c(1,0,1,0,1,0,0,1,1,1,1) 时,它会将z 指定为1 0 1 0 0 1 1 1 1 y 的第三到第十一个位置。概率方面是可以的。但是请看,我将p1 设为 0.6363。我让事情变得更简单,子向量不能从第一个条目开始,因为前两个条目使概率更小,在第三个和第四个相同的情况出现等等。所以最终我想结束c(1,1,1,1). 这是我的答案,但这并没有给我答案。因此,我将始终从 1 开始,仅当概率条件满足时才计算后续条目。
  • @Pankaj 抱歉,但根据您提供的条件,c(1,1,1,1) 是错误的。有没有你想要做的更大的图景?
  • 我猜,我的英语不太好。带来不便敬请谅解。我刚刚编辑了帖子。
猜你喜欢
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
相关资源
最近更新 更多