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: 進(jìn)階
2.1 判斷數(shù)據(jù)有多少缺失值
sum(is.na(mydata$week))
# [1] 1686
2.2 mice
包中的md.pattern()
函數(shù)可以生成一個(gè)以矩陣或數(shù)據(jù)框形式展示缺失值模式的表格。
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
解讀:0 表示變量的列中沒(méi)有缺失,1 則表示有缺失值。
第一行給出了沒(méi)有缺失值的數(shù)目(共多少行)稽屏。
第一列表示各缺失值模式的總數(shù)辕狰。
最后一行給出了每個(gè)變量的缺失值數(shù)目装蓬。
最后一列給出了缺失的變量的數(shù)目(這些變量存在缺失值)鬼佣。
第一列的數(shù)字和對(duì)應(yīng)的最后一列數(shù)字相乘再求和垛叨,即為缺失值總數(shù)迅腔。
在Sleep
這個(gè)數(shù)據(jù)集中装畅,總共有38個(gè)數(shù)據(jù)缺失(顯示在右下角)。
2.3 缺失值可視化
library(VIM)
aggr(sleep,prop=F,numbers=T)
matrixplot(sleep)
淺色表示值小沧烈,深色表示值大掠兄,默認(rèn)缺失值為紅色。
2.4 刪除含有缺失值的行的函數(shù)有na.omit()
和complete.cases()
锌雀。注意返回結(jié)果不同蚂夕。
newdata1 <- na.omit(sleep) #返回 values
newdata2 <- sleep[complete.cases(sleep),] # 返回?cái)?shù)據(jù)框
參考資料:
Quick-R: Missing Data
知乎博主@斑馬 的 R語(yǔ)言缺失值處理