缺失值的处理(基于R语言)

2020-12-31  本文已影响0人  北欧森林
Part 1. basic skills

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语言缺失值处理

上一篇下一篇

猜你喜欢

热点阅读