【R語言】缺失值
阿新 • • 發佈:2019-01-02
資料集中往往存在缺失值,在進行資料分析前需要了解資料的缺失值情況。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]
上述為一些基本的缺失值探索和處理方法,歡迎交流學習。