在R中查找长度大于1的向量元素

在R中查找长度大于1的向量元素,r,R,我有一个像这样的向量 c(0,1,2,0,0,2,2,2,2,2,2,1,0,1,2,2,2,2,2,1) 我想找到一个位置,一系列至少连续三个2,c(2,2,2),开始,如果它被打断,我想找到下一个第一个位置 返回向量应该如下所示: FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 我尝试了match和其他

我有一个像这样的向量

c(0,1,2,0,0,2,2,2,2,2,2,1,0,1,2,2,2,2,2,1)
我想找到一个位置,一系列至少连续三个2,c(2,2,2),开始,如果它被打断,我想找到下一个第一个位置

返回向量应该如下所示:

FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
我尝试了match和其他几个功能,但没有成功

这里有一种方法:

x <- c(0,1,2,0,0,2,2,2,2,2,2,1,0,1,2,2,2,2,2,1)
a <- rle(x)
z <- rep(FALSE, length(x))
z[sequence(a$lengths) == 1] <- a$lengths >= 2 & a$values == 2
z
#  [1] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
# [11] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE

x
r以下是我作为函数的尝试:

FUN <- function(x, n = 3) {
    y <- rle(x)
    z <- y[[1]] > (n - 1)
    unlist(lapply(1:length(z), function(i) {
        m <- rep(FALSE, each=y[[1]][i])
        if(z[i]) {
            m[1] <- TRUE
        }
        m
    }))
}

FUN(x)

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

有趣这可能比弗洛德尔的答案更容易理解,但他的答案更好。完美!非常感谢你!
FUN <- function(x, n = 3) {
    y <- rle(x)
    z <- y[[1]] > (n - 1)
    unlist(lapply(1:length(z), function(i) {
        m <- rep(FALSE, each=y[[1]][i])
        if(z[i]) {
            m[1] <- TRUE
        }
        m
    }))
}

FUN(x)

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