Есть ли способ «расширить» истинные значения вектора в R? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть вектор логических значений, среди которых только несколько являются Истиной, и я хотел бы преобразовать этот вектор, чтобы два значения с каждой стороны от ИСТИНЫ тоже стали ИСТИНАМИ.

Так что в других слово, которое я хотел бы преобразовать вектором так:

...FALSE FALSE FALSE TRUE FALSE FALSE FALSE...

так, чтобы два FALSE вокруг каждого значения TRUE тоже становились TRUE, так что конечный вектор выглядит так:

...FALSE TRUE TRUE TRUE TRUE TRUE FALSE...

Вот реальный пример того, что я хотел бы изменить:

[20] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE
[39] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE
[58] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE 
[77] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
[96]  TRUE  TRUE

Ответы [ 2 ]

1 голос
/ 26 марта 2020
examp <- replace(rep(FALSE, 10), c(3, 8), TRUE)
examp
# [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE

База R:

replace(examp, c(outer(c(1, -1), which(examp), '+')), TRUE)
# [1] FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE

Использование data.table::shift:

Reduce('|', data.table::shift(examp, -1:1, fill = FALSE))
# [1] FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE
1 голос
/ 26 марта 2020

Вы можете сделать это, как указано в комментарии, но, насколько я понимаю, вы хотите, чтобы два значения вокруг значения TRUE также были преобразованы в TRUE. Таким образом, вы можете просто сделать это дважды.

Мое предложение будет работать с версиями вектора lag и lead и операцией или :

v = c(
    F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, T, F, T,
    F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, T, T, F, F,
    F, F, F, F, F, F, F, T, T, F, F, F, F, T, T, T, T, F, F, 
    F, F, F, F, F, T, T, F, F, F, F, F, F, F, F, F, F, T, T,
    T, T
)

l = length(v)

v = v | c(v[-1], F) | c(F, v[-l])
v = v | c(v[-1], F) | c(F, v[-l])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...