首页 > 科研教程 > 30天学会R DAY10:缺失值识别及处理
2022
06-04

30天学会R DAY10:缺失值识别及处理

缺失值是数据中普遍存在的现象,信息无法获取、遗漏、异常值都有可能造成数据的缺失。缺失值的存在会影响数据分析,导致结果存在偏差。R语言中,缺失值用NA和NaN表示,最常用的是用NA符号表示该数据遗失、不存在或异常。

开始之前,我们先读入elder1、elder2这两个文件

elder1<-read.csv("elder1.csv")

elder2<-read.csv("elder2.csv")

一、查找缺失值

数据处理中,首先就是要判断是否存在缺值,可用is.na(),complete.cases()命令,返回逻辑符.

is.na(数据集) 判断数据中每个值是否存在缺失值,返回的结果FALSE代表不缺失,TRUE代表缺失

is.na(数据集$变量) 判断某个变量是否存在缺失值

complete.cases(数据) 判断每个样本是否存在缺失值,返回的结果FALSE代表观察样本不缺失,TRUE代表缺失

方法一 is.na(数据集)。is.na(数据集$变量) 识别缺失值较为常用,常与其他命令一起使用

is.na(elder1$height) #返回逻辑符,FALSE代表不缺失,TRUE代表缺失

!is.na(elder1$height) #返回逻辑符,TRUE代表不缺失,FALSE代表缺失

which(is.na(elder1$height)) #返回结果是缺失值的位置

[1] 19 61 103 489 673 1076 1308 1322 1901 5027

[11] 5744 5810 height变量中,所在行数存在缺失

t1<-elder1[which(is.na(elder1$ height)==T),] #按行提取缺失值

dim(t1) #显示几行几列

[1] 12 12 height缺失数据集t1 12行

t2<-elder1[which(is.na(elder1$ height)==F),] #按行提取不缺失值

dim(t2)

[1] 5834 12 height不缺失数据集t2 5834行

sum(is.na(elder1$height)) #计算缺失值的数量

[1] 12 height变量,缺失值数为12

any(is.na(elder1$height)) #any判断对错,如果存在缺失数据,返回结果TRUE

[1] TRUE height存在缺失值

any(!is.na(elder1$height)) #如果存在不缺失数据,返回结果TRUE

[1] TRUE height存在不缺失值

方法二 complete.cases(数据)。 complete.cases()需要加载VIM包,用于判断每个观察样本是否存在缺失值,TRUE表示不缺失, 常与其他命令一起使用

library(VIM)

complete.cases(elder1) #返回逻辑符,FALSE表示观察样本存在缺失

sum(!complete.cases(elder1) ) #计算存在缺失值的样本数量

[1] 58 elder1数据集58个观察样本存在缺失

二、处理缺失值

缺失值处理包括忽略、替代或删除

1.忽略

传统的统计软件诸如SPSS、SAS,对于缺失现象完全睁一只眼闭一只眼,统计分析没有人任何障碍,R语言忽略大法也可以用,但是不是主流,因为R语言忽略缺失值,可能得不到结果。

比如:

> nax<-c(1,2,4,5,NA,5) #产生有缺失的向量

> mean(nax) #计算均数,但无果

[1] NA

> mean(nax,na.rm =T) #要增加na.rm =T才能运行,删除缺失值

[1] 3.4

2.替代

数据集[is.na(数据集)]<- 替代值 将数据里的所有缺失值用某个值替代,不实用

数据集$变量[is.na(数据集$变量)]<-替代值

impute(数据集$变量,替代值),替代值可以是均数,中位数,特定值

方法一数据集[is.na(数据集)]<- 替代值。数据集$变量[is.na(数据集$变量)]<-替代值,变量值的替换,操作比较简单

elder1 [is.na(elder1)] #显示缺失值

elder[is.na(elder1)]<-0 #将elder1数据里的缺失值都用0替代

elder1$height[is.na(elder1$height)]<-0 #将height变量缺失值用0替代

方法二 impute(数据集$变量,替代值) 。 需要加载Hmisc包,可直接加载均数,中位数,实用性较强

elder1$height=impute(elder1$height, mean) #均值替代

elder1$height =impute(elder1$height, median) #中位数替代

elder1$height=impute(elder1$height, 175) #特定值替代

上述两种方法均为简单粗暴之法,R语言缺失值替代有更多的方法,比如多重填补、回归填补等,入门教程不再介绍,后续专题讲详细进行介绍。

3.删除

R语言进行计算时,缺失值不会被直接剔除,可以用na.rm,na.omit命令完成缺失值删除。

na.rm=逻辑符 与其它命令一起使用

na.omit(数据集)

na.omit(数据集$变量)

方法一 na.rm=逻辑符 。一般和其它命令一起使用

mean(elder1$height,na.rm = TRUE) #忽略缺失值,默认不移除

[1] 161.2071

mean(elder1$height) #不移除缺失值

[1] NA 不能进行运算

方法二 na.omit(数据集),na.omit(数据集$变量)

na.omit(elder1) #删除所有缺失的行

na.omit(elder1$height) #删除缺失值数据

诸位,缺失值的查找和基本处理方法,你掌握了吗?

DAY10的内容就介绍到这里!

转自:医学论文与统计分析

最后编辑:
作者:萌小白
一个热爱网络的青年!

发布评论

表情