R将值更改为另一个

qua*_*doo 1 replace r vector

我有以下向量:

a <- c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, NA, FALSE)
Run Code Online (Sandbox Code Playgroud)

我想改变FALSETRUE只有n FALSE彼此相邻的最多值.否则,不应更改值.例如,何时n = 2,我想获得:

c(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, NA, TRUE).
Run Code Online (Sandbox Code Playgroud)

这个问题的最佳解决方案是什么?

jog*_*ogo 6

rle() 并  inverse.rle() 可以帮助:

a <- c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, NA, FALSE)
r <- rle(a)
r$values[r$values==FALSE & r$lengths<=2] <- TRUE
inverse.rle(r)
# > inverse.rle(r)
# [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE    NA  TRUE
Run Code Online (Sandbox Code Playgroud)