Я пытаюсь очистить свои данные. Давайте представим, что у нас есть вектор из 20 значений с несколькими NAs
:
set.seed(1234)
x <- rnorm(20, mean = 10, sd = 5) %>% round
x[c(6, 8, 12, 16, 19)] <- NA
Так что это выглядит примерно так: > 4 11 15 -2 12 NA 7 NA 7 6 8 NA 6 10 15 NA 7 5 NA 22
Мне нужно заменить те значения, которые заключены в NA
с NA
). Например, 7
из моего вектора должно быть NA
, потому что предыдущее и следующее значения NA
. Я могу сделать это с помощью оператора ifelse
и некоторых функций dplyr
:
library(dplyr)
ifelse(is.na(lag(x))&is.na(lead(x)), NA, x)
> 4 11 15 -2 12 NA NA NA 7 6 8 NA 6 10 15 NA 7 5 NA NA
Вопрос в том, как заменить два значения, заключенные в NA
. 7
и 5
например? Я пытался продублировать условие, т.е. сделать lag(lag(x))
и lead(lead(x))
, но получаю беспорядок.
ifelse(is.na(lag(x))&is.na(lead(x)) | is.na(lead(lead(x)))&is.na(lag(lag(x))), NA, x)
> 4 11 15 -2 12 NA NA NA 7 NA 8 NA 6 NA 15 NA 7 5 NA NA