缺失值的处理(基于R语言)
2020-12-31 本文已影响0人
北欧森林
Part 1. basic skills
- In R, missing values are represented by the symbol NA (not available).
- Impossible values (e.g., dividing by zero) are represented by the symbol NaN (not a number).
- Unlike SAS, R uses the same symbol for character and numeric data.
Testing for Missing Values
is.na(x) # returns TRUE if x is missing
y <- c(1,2,3,NA)
is.na(y) # returns a vector (F F F T)
Recoding Values to Missing
mydata$v1[mydata$v1==99] <- NA
# recode 99 to missing for variable v1
# select rows where v1 is 99 and recode column v1
Excluding Missing Values from Analyses
Arithmetic functions on missing values yield missing values.
x <- c(1,2,NA,3)
mean(x) # returns NA
mean(x, na.rm=TRUE) # returns 2
The function complete.cases()
returns a logical vector indicating which cases are complete.
# list rows of data that have missing values
mydata[!complete.cases(mydata),]
The function na.omit()
returns the object with listwise deletion of missing values.
# create new dataset without missing data
newdata <- na.omit(mydata)
Part 2: 进阶
2.1 判断数据有多少缺失值
sum(is.na(mydata$week))
# [1] 1686
2.2 mice
包中的md.pattern()
函数可以生成一个以矩阵或数据框形式展示缺失值模式的表格。
library(mice)
md.pattern(sleep)
# Output:
# BodyWgt BrainWgt Pred Exp Danger Sleep Span Gest Dream NonD
# 42 1 1 1 1 1 1 1 1 1 1 0
# 9 1 1 1 1 1 1 1 1 0 0 2
# 3 1 1 1 1 1 1 1 0 1 1 1
# 2 1 1 1 1 1 1 0 1 1 1 1
# 1 1 1 1 1 1 1 0 1 0 0 3
# 1 1 1 1 1 1 1 0 0 1 1 2
# 2 1 1 1 1 1 0 1 1 1 0 2
# 2 1 1 1 1 1 0 1 1 0 0 3
# 0 0 0 0 0 4 4 4 12 14 38
NAFig1.png
解读:0 表示变量的列中没有缺失,1 则表示有缺失值。
第一行给出了没有缺失值的数目(共多少行)。
第一列表示各缺失值模式的总数。
最后一行给出了每个变量的缺失值数目。
最后一列给出了缺失的变量的数目(这些变量存在缺失值)。
第一列的数字和对应的最后一列数字相乘再求和,即为缺失值总数。
在Sleep
这个数据集中,总共有38个数据缺失(显示在右下角)。
2.3 缺失值可视化
library(VIM)
aggr(sleep,prop=F,numbers=T)
NAFig2.jpg
matrixplot(sleep)
NAFig3.png
浅色表示值小,深色表示值大,默认缺失值为红色。
2.4 删除含有缺失值的行的函数有na.omit()
和complete.cases()
。注意返回结果不同。
newdata1 <- na.omit(sleep) #返回 values
newdata2 <- sleep[complete.cases(sleep),] # 返回数据框
参考资料:
Quick-R: Missing Data
知乎博主@斑马 的 R语言缺失值处理