buffer表示TRUE之后没有TRUE可以居住的最小位置。

数据:

vec <- as.logical(c(1,0,1,1,1,0,1,1,0,1))

#[1]  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE


不同缓冲区编号的示例:

buffer = 1
#[1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE




buffer = 2
#[1]  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE


最后

buffer = 3
#[1]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE

最佳答案

也许有更好的方法,但是有一个选择,可以遍历TRUEvec值:

changeTRUE <- function(vec, buffer){
                 first_TRUE <- which(vec)[1] # get the first TRUE value index
                 i <- 1 # just so we can move on other TRUE values later
                 while(first_TRUE < length(vec)){ # while there are some TRUE
                   vec[(first_TRUE+1):min((first_TRUE+buffer), length(vec))] <- FALSE # put FALSE after the TRUE value according to buffer value (but not further than the end of vec)
                   i <- i+1 # to go to next TRUE
                   first_TRUE <- which(vec)[i] # get next TRUE index...
                 }
                 return(vec)
             }

changeTRUE(vec, 1)
 [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE
changeTRUE(vec, 2)
 [1]  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE
changeTRUE(vec, 3)
 [1]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE

关于r - 为TRUE值定义一个“缓冲区”,如果在“缓冲区”内,则将TRUE转换为FALSE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53499885/

10-12 17:22
查看更多