【发布时间】:2020-02-04 15:33:20
【问题描述】:
我正在尝试清理我的数据。假设我们有一个包含 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
【问题讨论】: