缺失值是数据中普遍存在的现象,信息无法获取、遗漏、异常值都有可能造成数据的缺失。缺失值的存在会影响数据分析,导致结果存在偏差。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的内容就介绍到这里!
转自:医学论文与统计分析- 本文固定链接: https://maimengkong.com/kyjc/970.html
- 转载请注明: : 萌小白 2022年6月4日 于 卖萌控的博客 发表
- 百度已收录