【R语言】缺失值
2018-01-29 22:19
155 查看
数据集中往往存在缺失值,在进行数据分析前需要了解数据的缺失值情况。R语言中的一些基本函数可用于查询缺失数据,另外还有一些第三方包可用于查询和处理数据缺失。
基本的缺失值查询可以通过is.na()和complete.cases()函数,当存在缺失值NA或者NAN时is.na()返回TRUE, complete.cases()则返回FALSE。
mice包函数md.pattern(x),可以以矩阵或者数据框的形式展示缺失值。输出的表格中,1表示列中不存在缺失值,0表示存在缺失值。返回的第一列表示缺失值模式的实例个数,最后一列表示各模式有缺失值的变量个数,最后一行表示没列缺失值的个数,整个表格最右下角的值表示总的确实值个数。
除此之外,VIM包中的aggr函数可以对缺失值进行可视化探索。参数prop为TRUE图形中显示缺失值比例, 为FALSE显示缺失值个数, 默认combined = FALSE,输出两张图,左侧为缺失值数量的柱状图。
设置combined为TRUE,上述图形合并为一张图,表示缺失值数量的柱状图合并到图形上方。
了解缺失值的基本分布情况后,往往需要更进一步了解缺失值产生的原因,可以通过查询缺失值的关联性,即一些关联性的缺失。
分析过缺失值后,需要进一步的处理缺失数据,例如删除缺失率较高的变量,或者对于缺失较少的数据进行插补,常见的如使用均值,中位数或者众数填补,另外也可以使用其它方法如装袋法,这里简单实现下装袋法。
上述为一些基本的缺失值探索和处理方法,欢迎交流学习。
基本的缺失值查询可以通过is.na()和complete.cases()函数,当存在缺失值NA或者NAN时is.na()返回TRUE, complete.cases()则返回FALSE。
#使用PimaIndiansDiabetes2数据集 require(mlbench) data("PimaIndiansDiabetes2", package = 'mlbench') #返回总的缺失值的个数和百分比(TRUE等价于1,FALSE等价于0) sum(is.na(PimaIndiansDiabetes2)) mean(is.na(PimaIndiansDiabetes2)) #统计每行的缺失个数 rowmissing <- apply(PimaIndiansDiabetes2, 1, function(x){sum(is.na(x))}) #统计每列的缺失个数 colmissing <- apply(PimaIndiansDiabetes2, 2, function(x){sum(is.na(x))}) #返回没有缺失值的行 PimaIndiansDiabetes2[complete.cases(PimaIndiansDiabetes2),] #返回包含一个或多个缺失值的行 PimaIndiansDiabetes2[!complete.cases(PimaIndiansDiabetes2),]
mice包函数md.pattern(x),可以以矩阵或者数据框的形式展示缺失值。输出的表格中,1表示列中不存在缺失值,0表示存在缺失值。返回的第一列表示缺失值模式的实例个数,最后一列表示各模式有缺失值的变量个数,最后一行表示没列缺失值的个数,整个表格最右下角的值表示总的确实值个数。
require(mice) md.pattern(PimaIndiansDiabetes2)
除此之外,VIM包中的aggr函数可以对缺失值进行可视化探索。参数prop为TRUE图形中显示缺失值比例, 为FALSE显示缺失值个数, 默认combined = FALSE,输出两张图,左侧为缺失值数量的柱状图。
require(VIM) aggr(PimaIndiansDiabetes2, prop = FALSE, number = TRUE)
设置combined为TRUE,上述图形合并为一张图,表示缺失值数量的柱状图合并到图形上方。
aggr(PimaIndiansDiabetes2, prop = FALSE, number = TRUE, combined = TRUE)
了解缺失值的基本分布情况后,往往需要更进一步了解缺失值产生的原因,可以通过查询缺失值的关联性,即一些关联性的缺失。
#转换数据框中元素为0,1形式,1表示数据确实,0表示未缺失 pd <- as.data.frame(abs(is.na(PimaIndiansDiabetes2))) #找出所有包含缺失值的列 pd_missing <- pd[, sapply(pd, function(x) {any( x == 1)})] #含缺失数据的变量之间的相关系数 cor(pd_missing)
分析过缺失值后,需要进一步的处理缺失数据,例如删除缺失率较高的变量,或者对于缺失较少的数据进行插补,常见的如使用均值,中位数或者众数填补,另外也可以使用其它方法如装袋法,这里简单实现下装袋法。
require(caret) #装袋法对缺失值插补 preproc <- preProcess(PimaIndiansDiabetes2[-9], method="bagImpute") data <- predict(preproc, PimaIndiansDiabetes2[-9]) data$diabetes <- PimaIndiansDiabetes2[, 9]
上述为一些基本的缺失值探索和处理方法,欢迎交流学习。
相关文章推荐
- 缺失值的处理——R语言
- R语言 处理缺失值数据
- R语言处理缺失值的高级方法 ---后面有一些python画图的语句
- R语言学习:数据结构6-缺失值
- 在R语言中利用mice包进行缺失值的线性回归填补
- R语言删除数据框中含有缺失值NA的行或列
- R语言处理缺失数据的高级方法
- R语言移除缺失值 NA
- R语言移除缺失值 NA.RM
- R语言数据处理之缺失数据问题(一)
- R语言处理缺失数据的高级方法
- R语言-数据预处理的一些实用(万能)办法:缺失值、数据重复、共线性等等的处理
- R语言自动检测缺失值
- R语言|数据预处理--3缺失值离群点处理
- R语言处理缺失数据的高级方法
- R语言处理缺失数据的高级方法
- R语言处理缺失数据的高级方法
- 【转】R语言处理缺失数据的高级方法
- R语言中的缺失值处理
- 用R语言的MICE包对缺失数据进行多重插补(一)-- 缺失数据分析