R 限制逻辑系统中的错误数

R 限制逻辑系统中的错误数,r,R,我在这里提出以下问题: 这似乎非常适合我的数据,因为我用多个列对数据进行了分组,在这里我试图继续进行最后的观察。然而,我想限制它向前推进的程度。代码的相关部分是!是nax。假设我想把它限制为两个,然后给定序列TRUE-FALSE-FALSE-FALSE-FALSE-FALSE-FALSE-TRUE,我想把它作为TRUE-TRUE-FALSE-TRUE-FALSE-TRUE-FALSE-TRUE 这本身会使true forward的值增加到与XTS非常相似的n倍,这似乎使得使用此方法而不是XTS.

我在这里提出以下问题:

这似乎非常适合我的数据,因为我用多个列对数据进行了分组,在这里我试图继续进行最后的观察。然而,我想限制它向前推进的程度。代码的相关部分是!是nax。假设我想把它限制为两个,然后给定序列TRUE-FALSE-FALSE-FALSE-FALSE-FALSE-FALSE-TRUE,我想把它作为TRUE-TRUE-FALSE-TRUE-FALSE-TRUE-FALSE-TRUE


这本身会使true forward的值增加到与XTS非常相似的n倍,这似乎使得使用此方法而不是XTS.na.locf是多余的,但我希望有一种有效的方法来避免XTS。感谢您的帮助。

一种可能是通过将不需要的FALSE重复转换为下一个TRUE来修改向量的游程编码:

编辑2:简短解释:

pmax0,r$length mx是一个向量,如果长度最多为mx,则其分量为零,或者长度与mx之间的差值为零。由于只关心FALSE的重复是相关的,因此需要乘以r$values==FALSE,这将使与TRUE对应的向量的任何条目归零。 如果已知r$values的最后一个元素为真,则由于。因此,我们可以将不需要的假移到下面的真。这是通过先从假数中减去,然后再加上真数来实现的。因为我们知道最后一个变化条目是针对一个真的c0,headchanges,-1只是将所有对FALSE的变化向右移动,从而转换为一个真的。
很好,你甚至可以优雅地处理以虚假结尾的案件。我想知道你能否解释一下你最后两行代码的变化和修改r的长度,以供我自己理解?我试图在案例中使用if语句,但这更简洁、更快。谢谢
mx <- 2
v <- c(TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE)
r <- rle(v)
if(!r$values[length(r$values)]) {
  r$values <- c(r$values,TRUE)
  r$lengths <- c(r$lengths,0)
}
changes <- pmax(0,r$lengths-mx) * (r$values == FALSE)
r$lengths <- r$lengths - changes + c(0,head(changes,-1))
> print(inverse.rle(r))
 [1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE