1より私は、少なくとも3つの連続した2部の一連の位置を見つけたいこの長さのベクトル要素を見つける長いR
c(0,1,2,0,0,2,2,2,2,2,2,1,0,1,2,2,2,2,2,1)
ようなベクターを有する、C(2,2、 2)、開始し、それが中断されている場合、私は次の最初の位置を見つけたいと思います。
戻りベクトルは次のようになります。私は試合や他のいくつかの機能を試してみましたが、成功せずにここで
1より私は、少なくとも3つの連続した2部の一連の位置を見つけたいこの長さのベクトル要素を見つける長いR
c(0,1,2,0,0,2,2,2,2,2,2,1,0,1,2,2,2,2,2,1)
ようなベクターを有する、C(2,2、 2)、開始し、それが中断されている場合、私は次の最初の位置を見つけたいと思います。
戻りベクトルは次のようになります。私は試合や他のいくつかの機能を試してみましたが、成功せずにここで
が一つの方法です
FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
を:
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
r <- rle(x)
# Which entries are true in the result:
w <- (cumsum(r$length)[r$values==2] - (r$length[r$values==2]-1))[r$length[r$values==2]>2]
result <- logical(length(x))
result[w] <- T
result
## [1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
## [17] 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
完璧!どうもありがとうございました! – Mart
ベクトル化+1 –