省略或替换缺失值

重新编码缺失值

通常,缺失的数据不会在数据集中编码为 NA。例如,在 SPSS 中,缺失值通常由值 99 表示。

num.vec <- c(1, 2, 3, 99, 5)
num.vec
## [1]  1  2  3 99  5

可以使用子集直接分配 NA

num.vec[num.vec == 99] <- NA

但是,优选的方法是使用如下的 is.na<-。帮助文件(?is.na)指出:

is.na<- 可以提供更安全的方法来设置缺失。例如,它对因素的行为不同。

is.na(num.vec) <- num.vec == 99

两种方法都返回

num.vec
## [1]  1  2  3 NA  5

删除缺失值

可以通过多种方式从向量中删除缺少的值:

num.vec[!is.na(num.vec)]
num.vec[complete.cases(num.vec)]
na.omit(num.vec)
## [1] 1 2 3 5

从计算中排除缺失值

在具有缺失值的向量上使用算术函数时,将返回缺失值:

mean(num.vec) # returns: [1] NA

na.rm 参数告诉函数从计算中排除 NA 值:

mean(num.vec, na.rm = TRUE) # returns: [1] 2.75

# an alternative to using 'na.rm = TRUE':
mean(num.vec[!is.na(num.vec)]) # returns: [1] 2.75

一些 R 函数,如 lm,有一个 na.action 参数。这个的默认值是 na.omit,但是使用 options(na.action = 'na.exclude') 可以更改 R 的默认行为。

如果没有必要更改默认行为,但是对于特定情况需要另一个 na.actionna.action 参数需要包含在函数调用中,例如:

 lm(y2 ~ y1, data = anscombe, na.action = 'na.exclude')