您的位置:首页 > 其它

【R语言】缺失值

2018-01-29 22:19 155 查看
      数据集中往往存在缺失值,在进行数据分析前需要了解数据的缺失值情况。R语言中的一些基本函数可用于查询缺失数据,另外还有一些第三方包可用于查询和处理数据缺失。

     基本的缺失值查询可以通过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语言 缺失值