欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

R語言 出現(xiàn)矩陣/缺失值的解決方案

 更新時間:2021年03月10日 15:36:41   作者:亓了個葩  
這篇文章主要介紹了R語言 出現(xiàn)矩陣/缺失值的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

缺失值處理一般包括三步:

1. 識別缺失數(shù)據(jù);

2. 檢查導(dǎo)致數(shù)據(jù)缺失的原因;

3. 刪除包含缺失值的實(shí)例或用合理的數(shù)值代替(插補(bǔ))缺失值。

1.判斷缺失值

函數(shù)is.na()、is.nan()和is.infinite()可分別用來識別缺失值、不可能值和無窮值。每個返回結(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ù)據(jù)框中沒有缺失值的行

超級好用

#加載數(shù)據(jù)集
>data(sleep,package = "VIM")
#沒有缺失值的行
>sleep[complete.cases(sleep),]
#列出有一個或多個缺失值的行
>sleep[!complete.cases(sleep),]

2.圖形探究缺失數(shù)

#自己生成圖形
>library("VIM")
>aggr(sleep,prop = FALSE,numbers = TRUE)

matrixplot()函數(shù)可生成展示每個實(shí)例數(shù)據(jù)的圖形

#自己生成圖形
marginplot(sleep[c("Gest","Dream")],phc=c(20),col=c("darkgray","red","blue"))

3.刪除缺失值

函數(shù)complete.cases()可以用來存儲沒有缺失值的數(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é)果才存儲到newdata中,以后擬合就用新數(shù)據(jù)newdata.

處理含缺失值的數(shù)據(jù)集時,成對刪除常作為行刪除的備選方法使用。對于成對刪除,觀測只是當(dāng)它含缺失數(shù)據(jù)的變量涉及某個特定分析時才會被刪除:

>cor(sleep,use = "pairwise.complete.obs")

3.1補(bǔ)全缺失值

函數(shù)mice()首先從一個包含缺失數(shù)據(jù)的數(shù)據(jù)框開始,然后返回一個包含多個(默認(rèn)為5個)完整數(shù)據(jù)集的對象。

每個完整數(shù)據(jù)集都是通過對原始數(shù)據(jù)框中的缺失數(shù)據(jù)進(jìn)行插補(bǔ)而生成的。

由于插補(bǔ)有隨機(jī)的成分,因此每個完整數(shù)據(jù)集都略有不同。

然后,with()函數(shù)可依次對每個完整數(shù)據(jù)集應(yīng)用統(tǒng)計模型(如線性模型或廣義線性模型),最 后 ,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語言讀取數(shù)據(jù)空值

一、Txt文件

1. 文件中的內(nèi)容有雙引號,空值的時候是一對雙引號

filename.txt 文件內(nèi)容形如:

"ID" "ITEM"

"1080254842" "漢字"

"1080254842" "中文"

"1080594798" ""

"1080594798" ""

導(dǎo)入數(shù)據(jù):

test <-read.table("filename.txt",header=TRUE)

空值部分并不是NA,R語言不會把他識別為NA,改為下面的語句,即可解決。

test <-read.table("filename.txt",header=TRUE,na.strings = "")

2. 文件中內(nèi)容無雙引號,空值即直接空白,形如下面:

ID ITEM

1080254842 漢字

1080254842 中文

1080594798

1080594798

導(dǎo)入數(shù)據(jù):

test <-read.table("filename.txt",header=TRUE)

會出現(xiàn)錯誤: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文件的列是用逗號分開的,加上sep=",",幫助R通過識別逗號來分割列。如果沒加,會出現(xiàn)原本多列數(shù)據(jù)導(dǎo)入后變?yōu)橐涣械那闆r。

na.strings = "":處理缺失值問題。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

最新評論