R初级数据管理——缺失值NA的处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R初级数据管理——缺失值NA的处理相关的知识,希望对你有一定的参考价值。
参考技术A 在问卷数据或实验数据中,经常会包含由于未作答、设备故障或误编码数据的缘故出现缺失值。在R中,缺失值以符号NA(Not Available,不可用)表示。不可能出现的值(例如,被0除的结果) 通过符号NaN(Not a Number,非数值)来表示。首先我们来安装两个R包,VIM和mice包。
函数 is.na( ) 允许你检测缺失值是否存在,作用于一个对象上,也将返回一个相同大小的对象,如果某个元素是缺失值,相应的位置将被改写为TRUE,不是缺失值的位置则为FALSE。
由图可以看出,所有显示TRUE的地方都是缺失值。
该可以用来识别矩阵或数据框中没有缺失值的行。若每行都包含完整实例,则返回TRUE的逻辑向量;若每行有一个或多个缺失值,则返回FALSE。
可以看出1、3、4行存在缺失值。
mice包中的md.pattern,形成缺失表。
aggr ( ) 是VIM包中的函数,可以形成缺失图。
根据变量之间的关系来填补或恢复缺失值,通过推理,数据的恢复可能是准确的或近似的。
把包含一个或多个缺失值的行删除,称作行删除法,或个案删除,大部分统计软件包默认采用的是行删除法。
通过函数 na.omit( ) 移除所有含有缺失值的观测。na.omit( ) 可以删除所有含有缺失数据的行。
当然,我们有时并不想把缺失的行直接删除,因为这样难以避免造成了数据的损失。简单插补是用均值,中位数或众数来替换变量中缺失的值。将初始数据集中的属性分为数值属性和非数值属性来分别进行处理。
对缺失值的高级处理方式有很多,大致有回归插补、多重插补、热卡插补,K最近距离邻法等等,现在只介绍多重插补的原理:
多重插补(MI)是一种基于重复模拟的处理缺失值的方法,它从一个包含缺失值的数据集中生成一组数据完整的数据集(即不包含缺失值的数据集,通常是3-10个)。每个完整数据集都是通过对原始数据中的缺失数据进行插补而生成的。在每个完整的数据集上引用标准的统计方法,最后,把这些单独的分析结果整合为一组结果。
基于mice包的分析通常符合以下分析过程:
现在我们尝试插补之前的sleep数据:
完全按照上面的抄就可以,summary之后可以看到:
可以通过检查分析过程所创建的对象来获取更多的插补信息。例如,来看imp对象的汇总信息:
从输出结果可以看到,五个数据集同时被创建,预测均值(pmm)匹配法被用来处理每个含 缺失数据的变量。BodyWgt、BrainWgt、Pred、Exp和Danger没有进行插补(" "),因为它们并没有缺失数据。VisitSequence从左至右展示了插补的变量,从NonD开始,以Gest结束。最后,预测变量矩阵(PredictorMatrix)展示了进行插补过程的含有缺失数据的变量,它们利 用了数据集中其他变量的信息.(在矩阵中,行代表插补变量,列代表为插补提供信息的变量,1 和0分别表示使用和未使用。)
r从缺失值以上的单元格中复制值[重复]
这个问题在这里已有答案:
我有一个大型数据集,其简短版本如下
Col1 Col2
0 1
1 0.9971
4 NA
6 NA
7 NA
14 NA
18 0.9951
22 NA
25 NA
46 0.9941
57 NA
59 NA
60 0.9921
对于Col2中缺少的值,我希望将NA替换为来自同一列Col2的上面的值。最终数据集如下所示。
Col1 Col2
0 1
1 0.9971
4 0.9971
6 0.9971
7 0.9971
14 0.9971
18 0.9951
22 0.9951
25 0.9951
46 0.9941
57 0.9941
59 0.9941
60 0.9921
答案
在包na.locf
中有一个函数zoo
(NA最后一次观察结转):
> zoo::na.locf(df)
Col1 Col2
1 0 1.0000
2 1 0.9971
3 4 0.9971
4 6 0.9971
5 7 0.9971
6 14 0.9971
7 18 0.9951
8 22 0.9951
9 25 0.9951
10 46 0.9941
11 57 0.9941
12 59 0.9941
13 60 0.9921
以上是关于R初级数据管理——缺失值NA的处理的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用isna函数查看列表和dataframe中是否包含缺失值将dataframe中数据列中的异常值标注为缺失值NA使用na.omit函数删除dataframe中包含缺失值NA的数据行