a、NA:缺失值
b、NaN:不是一个数,代表不可能值
c、Inf,-Inf:分别代表正无穷、负无穷
is.na()、is.nan()和is.infinite()函数返回值实例
X | is.na(X) | is.nan(X) | is.infinite(X)表示无穷值 |
X <- NA | TRUE | FALSE | FLASE |
X <- 0/0 | TRUE | TRUE | FLASE |
X <- 1/0 | FLASE | FLASE | TRUE |
> y <- c(1,2,3,NA)
> is.na(y)
[1] FALSE FALSE FALSE TRUE
> data(sleep,package='VIM') #加载数据
> sleep[complete.cases(sleep),] #列出没有缺失值的行
BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
2 1.000 6.60 6.3 2.0 8.3 4.5 42.0 3 1 3
5 2547.000 4603.00 2.1 1.8 3.9 69.0 624.0 3 5 4
6 10.550 179.50 9.1 0.7 9.8 27.0 180.0 4 4 4
#太长,删除过多输出
> sleep[!complete.cases(sleep),] #列出一个或者多个缺失值的行
BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
1 6654.000 5712.0 NA NA 3.3 38.6 645 3 5 3
3 3.385 44.5 NA NA 12.5 14.0 60 1 1 1
4 0.920 5.7 NA NA 16.5 NA 25 5 2 3
#太长,删除过多输出
> sum(is.na(sleep$Dream)) #计算缺失值个数
[1] 12
> mean(is.na(sleep$Dream)) #19%的实例在此变量上有缺失值
[1] 0.1935484
> mean(!complete.cases(sleep)) #数据集中32%的实例包含一个或者多个缺失值
[1] 0.3225806
注意
a、complete.cases() 函数仅将 NA 和 NaN 识别为缺失值,无穷值( Inf 和 -Inf )被当作有效值
b、必须使用与本章中类似的缺失值函数来识别 R 数据对象中的缺失值,像 myvar == NA 这样的逻辑比较无法实现