R語(yǔ)言 出現(xiàn)矩陣/缺失值的解決方案
缺失值處理一般包括三步:
1. 識(shí)別缺失數(shù)據(jù);
2. 檢查導(dǎo)致數(shù)據(jù)缺失的原因;
3. 刪除包含缺失值的實(shí)例或用合理的數(shù)值代替(插補(bǔ))缺失值。
1.判斷缺失值
函數(shù)is.na()、is.nan()和is.infinite()可分別用來識(shí)別缺失值、不可能值和無窮值。每個(gè)返回結(jié)果都是
TRUE或FALSE
na表示缺失值
nan表示NOT A NUMBER
infinite表示+-Inf
一定要親手試x = 0/0,以及x = 1/0
>x <- NA > is.na(x) [1] TRUE > is.nan(x) [1] FALSE > is.infinite(x) [1] FALSE
函數(shù)complete.cases()可用來識(shí)別矩陣或數(shù)據(jù)框中沒有缺失值的行
超級(jí)好用
#加載數(shù)據(jù)集 >data(sleep,package = "VIM") #沒有缺失值的行 >sleep[complete.cases(sleep),] #列出有一個(gè)或多個(gè)缺失值的行 >sleep[!complete.cases(sleep),]
2.圖形探究缺失數(shù)
#自己生成圖形
>library("VIM")
>aggr(sleep,prop = FALSE,numbers = TRUE)
matrixplot()函數(shù)可生成展示每個(gè)實(shí)例數(shù)據(jù)的圖形
#自己生成圖形
marginplot(sleep[c("Gest","Dream")],phc=c(20),col=c("darkgray","red","blue"))
3.刪除缺失值
函數(shù)complete.cases()可以用來存儲(chǔ)沒有缺失值的數(shù)據(jù)框或者矩陣形式的實(shí)例(行):
#可以把mydata替換成sleep,延續(xù)上面的代碼 >newdata <- mydata[complete.cases(mydata),]
同樣的結(jié)果可以用na.omit函數(shù)獲得:
#可以把mydata替換成sleep,延續(xù)上面的代碼 >newdata <- na.omit(mydata)
兩行代碼表示的意思都是:mydata中所有包含缺失數(shù)據(jù)的行都被刪除,然后結(jié)果才存儲(chǔ)到newdata中,以后擬合就用新數(shù)據(jù)newdata.
處理含缺失值的數(shù)據(jù)集時(shí),成對(duì)刪除常作為行刪除的備選方法使用。對(duì)于成對(duì)刪除,觀測(cè)只是當(dāng)它含缺失數(shù)據(jù)的變量涉及某個(gè)特定分析時(shí)才會(huì)被刪除:
>cor(sleep,use = "pairwise.complete.obs")
3.1補(bǔ)全缺失值

函數(shù)mice()首先從一個(gè)包含缺失數(shù)據(jù)的數(shù)據(jù)框開始,然后返回一個(gè)包含多個(gè)(默認(rèn)為5個(gè))完整數(shù)據(jù)集的對(duì)象。
每個(gè)完整數(shù)據(jù)集都是通過對(duì)原始數(shù)據(jù)框中的缺失數(shù)據(jù)進(jìn)行插補(bǔ)而生成的。
由于插補(bǔ)有隨機(jī)的成分,因此每個(gè)完整數(shù)據(jù)集都略有不同。
然后,with()函數(shù)可依次對(duì)每個(gè)完整數(shù)據(jù)集應(yīng)用統(tǒng)計(jì)模型(如線性模型或廣義線性模型),最 后 ,pool()函數(shù)將這些單獨(dú)的分析結(jié)果整合為一組結(jié)果。
最終模型的標(biāo)準(zhǔn)誤和p值都將準(zhǔn)確地反映出由于缺失值和多重插補(bǔ)而產(chǎn)生的不確定性。
>library(mice)
>data("sleep",package = "VIM")
>imp <- mice(sleep,seed = 1234)
#imp <- mice(sleep)
>fit <- with(imp,lm(Dream~Span+Gest))
fit
>pooled <- pool(fit)
>summary(pooled)
imp
>dataset2 <- complete(imp,action = 2)
>cor(sleep,use = "pairwise.complete.obs")
dataset2 is the newData
下圖為完整缺失值處理圖片:

補(bǔ)充:R語(yǔ)言讀取數(shù)據(jù)空值
一、Txt文件
1. 文件中的內(nèi)容有雙引號(hào),空值的時(shí)候是一對(duì)雙引號(hào)
filename.txt 文件內(nèi)容形如:
"ID" "ITEM"
"1080254842" "漢字"
"1080254842" "中文"
"1080594798" ""
"1080594798" ""
導(dǎo)入數(shù)據(jù):
test <-read.table("filename.txt",header=TRUE)
空值部分并不是NA,R語(yǔ)言不會(huì)把他識(shí)別為NA,改為下面的語(yǔ)句,即可解決。
test <-read.table("filename.txt",header=TRUE,na.strings = "")
2. 文件中內(nèi)容無雙引號(hào),空值即直接空白,形如下面:
ID ITEM
1080254842 漢字
1080254842 中文
1080594798
1080594798
導(dǎo)入數(shù)據(jù):
test <-read.table("filename.txt",header=TRUE)
會(huì)出現(xiàn)錯(cuò)誤:Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :3行沒有2元素
第三行第二元素沒有。
修改為如下即可:
test <-read.table("filename.txt",header=TRUE,fill=TRUE)
導(dǎo)入數(shù)據(jù)成功,但是,空值仍然不是NA,還需加上na.strings = "",
test <-read.table("filename.txt",header=TRUE, fill=TRUE, na.strings = "")
成功導(dǎo)入。
二、csv文件
test <-read.csv("test.csv",header=TRUE,sep=",",na.strings = "")
其中:
header =TRUE,表示把第一行作為標(biāo)題。
sep=",",因?yàn)閏sv文件的列是用逗號(hào)分開的,加上sep=",",幫助R通過識(shí)別逗號(hào)來分割列。如果沒加,會(huì)出現(xiàn)原本多列數(shù)據(jù)導(dǎo)入后變?yōu)橐涣械那闆r。
na.strings = "":處理缺失值問題。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
R語(yǔ)言中的vector(向量),array(數(shù)組)使用總結(jié)
這篇文章主要介紹了R語(yǔ)言中的vector(向量),array(數(shù)組)使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
R語(yǔ)言關(guān)于“包”的知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享的是一篇關(guān)于R語(yǔ)言“包”的知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-03-03
R語(yǔ)言 實(shí)現(xiàn)list類型數(shù)據(jù)轉(zhuǎn)換
這篇文章主要介紹了R語(yǔ)言 實(shí)現(xiàn)list類型數(shù)據(jù)轉(zhuǎn)換,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
R語(yǔ)言-實(shí)現(xiàn)提取包含某字符串的行變量
這篇文章主要介紹了R語(yǔ)言-實(shí)現(xiàn)提取包含某字符串的行變量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04
基于R/RStudio中安裝包“無法與服務(wù)器建立連接”的解決方案
這篇文章主要介紹了基于R/RStudio中安裝包“無法與服務(wù)器建立連接”的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04
R語(yǔ)言繪制數(shù)據(jù)可視化小提琴圖Violin plot with dot畫法
這篇文章主要為大家介紹了R語(yǔ)言繪制數(shù)據(jù)可視化小提琴圖Violin plot with dot畫法的示例詳解有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02
R語(yǔ)言刷題檢驗(yàn)數(shù)據(jù)缺失類型過程詳解
這篇文章主要為大家介紹了R語(yǔ)言刷題中檢驗(yàn)數(shù)據(jù)缺失類型的過程示例分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
R語(yǔ)言中g(shù)gplot2繪制雙坐標(biāo)軸圖
本文主要介紹了R語(yǔ)言中g(shù)gplot2繪制雙坐標(biāo)軸圖,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

