資料集中往往存在缺失值,在進行資料分析前需要了解資料的缺失值情況。
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))
#統計每行的缺失個數
function(x))
#統計每列的缺失個數
function(x))
#返回沒有缺失值的行
pimaindiansdiabetes2[complete.cases(pimaindiansdiabetes2),]
#返回包含乙個或多個缺失值的行
pimaindiansdiabetes2[!complete.cases(pimaindiansdiabetes2),]
mice包函式md.pattern(x),可以以矩陣或者資料框的形式展示缺失值。輸出的**中,1表示列中不存在缺失值,0表示存在缺失值。返回的第一列表示缺失值模式的例項個數,最後一列表示各模式有缺失值的變數個數,最後一行表示每列缺失值的個數,整個**最右下角的值表示總的缺失值個數。
除此之外,vim包中的aggr函式可以對缺失值進行視覺化探索。引數prop為true圖形中顯示缺失值比例, 為false顯示缺失值個數, 預設combined = false,輸出兩張圖,左側為缺失值數量的柱狀圖。
設定combined為true,上述圖形合併為一張圖,表示缺失值數量的柱狀圖合併到圖形上方。
了解缺失值的基本分布情況後,往往需要更進一步了解缺失值產生的原因,可以通過查詢缺失值的關聯性,即一些關聯性的缺失。
#轉換資料框中元素為0,1形式,1表示資料缺失,0表示未缺失
pd #找出所有包含缺失值的列
#含缺失資料的變數之間的相關係數
cor(pd_missing)
分析過缺失值後,需要進一步的處理缺失資料,例如刪除缺失率較高的變數,或者對於缺失較少的資料進行插補,常見的如使用均值,中位數或者眾數填補,另外也可以使用其它方法如裝袋法,這裡簡單實現下裝袋法。
require(caret)
#裝袋法對缺失值插補
preproc
method="bagimpute")
data
data$diabetes
上述為一些基本的缺失值探索和處理方法,歡迎交流學習。 R語言處理缺失值
在處理資料過程中,避免不了會產生一些缺失值,如未填寫資料或者編碼錯誤等原因,用na表示缺失值。在r語言中,is.na 函式可以判斷元素是否是缺失值,從而返回邏輯值 true false 所以該函式將會返回和元資料集一樣大小的資料集。在判斷缺失值的過程中,需要注意以下兩點 既然缺失值可能無處不在,那麼...
R語言矩陣 缺失值處理
缺失值處理一般包括三步 1.識別缺失資料 2.檢查導致資料缺失的原因 3.刪除包含缺失值的例項或用合理的數值代替 插補 缺失值。x is.na x 1 true is.nan x 1 false is.infinite x 1 false 函式complete.cases 可用來識別矩陣或資料框中沒...
R 缺失值處理
假設有一組資料集如下 data data.frame y c 1,2,3,na,5,6 x1 c 6,na,4,3,2,1 x2 c 1,3,6,9,12,na na 即表示缺失值。在r中輸入該資料。判斷缺失資料 is.na data 統計缺失值個數 sum is.na data 檢視每個樣本資料是...