R语言缺失数据处理2021.2.2
2021-02-02 本文已影响0人
R语言_茶味先生
一、缺失数据
缺失数据的分类
统计学家通常将缺失数据分为三类。它们都用概率术语进行描述,但思想都非常直观。我们将用sleep研究中对做梦时长的测量(有12个动物有缺失值)来依次阐述三种类型。
- 完全随机:缺失若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据为完全随机缺失(MCAR)。若12个动物的做梦时长值缺失不是由于系统原因,那么可认为数据是MCAR。注意,如果每个有缺失值的变量都是MCAR,那么可以将数据完整的实例看做是对更大数据集的一个简单随机抽样。
- 随机缺失:若某变量上的缺失数据与其他观测变量相关,与它自己的未观测值不相关,则数据为随机缺失(MAR)。例如,体重较小的动物更可能有做梦时长的缺失值(可能因为较小的动物较难观察),“缺失”与动物的做梦时长无关,那么该数据就可以认为是MAR。此时,一旦你控制了体重变量,做梦时长数据的缺失与出现将是随机的。
- 非随机缺失:若缺失数据不属于MCAR或MAR,则数据为非随机缺失(NMAR)。例如,做梦时长越短的动物也更可能有做梦数据的缺失(可能由于难以测量时长较短的事件),那么数据可认为是NMAR。
缺失值的定义
在R中, NA代表缺失值, NA是不可用,not available的简称,用来存储缺失信息。这里缺失值NA表示没有,但注意没有并不一 定就是0 , NA是不知道是多少,也能是0 ,也可能是任何值,缺失值和值为零是完全不同的。
含缺失值的数据集进行计算的方法
1.用NA remove条件语句即可,例如求和公式中添加na.rm=TRUE就可以把缺失值去除,向量个数也对应减少。
a<-c(NA,1:49)
sum(a,na.rm=TRUE)
如果数据集中包含NA,那么所有的计算都会有问题。发现值为NA时,我们再使用na.rm进行处理,这样的操作是滞后的,所以需要在处理数据之前就知道数据集中是否包含了缺失值。R语言提供了is.na()来进行逻辑测试,如果数据集中含NA值,对应位置返回TRUE,其余位置返回FALSE。
2.na.rm只是函数中的一个参数,如果想去掉数据集中的这些缺失值,生成一个没有缺失值的数据集,这时可以使用na.omit函数
- 用na.omit处理向量
c<-c(NA,1:20,NA,NA)
d<-na.omit(c)
图1 输出结果
- 用na.omit处理数据框,即将数据集中包含NA的每一行都删除掉
na.omit(sleep)
图2 输出结果
处理完之后可以输入length来观察数据集omit函数处理前后的行数变化,并可以从中获得删除了多少行包含NA的数据
length(rownames(sleep))
length(rownames(na.omit(sleep)))
计算缺失值NA
- 计算缺失值NA的总个数
sum(is.na(数据集名称))
- 计算每行是否含有缺失值NA
rowSums(数据集名称)
- 计算每列是否含有缺失值NA
colSums(数据集名称)
处理缺失值包的介绍
图3 处理缺失值包的介绍二、其他缺失数据
1、缺失数据NaN,代表不可能的值;
2、Inf表示无穷,分为正无穷Inf和负无穷-Inf,代表无穷大或者无穷小。
同样的,R语言提供了is.nan()/is.infinite()来进行逻辑测试,如果数据集中含NaN值/Inf值,对应位置返回TRUE,其余位置返回FALSE。
三、不同缺失值之间的差别
1、NA是存在的值,但是不知道是多少;
2、NaN是不存在的;
3、Inf存在,是无无穷大后者无穷小,但是表示不可能的值。