您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關R語言出現矩陣/缺失值怎么辦,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1. 識別缺失數據;
2. 檢查導致數據缺失的原因;
3. 刪除包含缺失值的實例或用合理的數值代替(插補)缺失值。
函數is.na()、is.nan()和is.infinite()可分別用來識別缺失值、不可能值和無窮值。每個返回結果都是
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
函數complete.cases()可用來識別矩陣或數據框中沒有缺失值的行
超級好用
#加載數據集 >data(sleep,package = "VIM") #沒有缺失值的行 >sleep[complete.cases(sleep),] #列出有一個或多個缺失值的行 >sleep[!complete.cases(sleep),]
#自己生成圖形 >library("VIM") >aggr(sleep,prop = FALSE,numbers = TRUE)
matrixplot()函數可生成展示每個實例數據的圖形
#自己生成圖形 marginplot(sleep[c("Gest","Dream")],phc=c(20),col=c("darkgray","red","blue"))
函數complete.cases()可以用來存儲沒有缺失值的數據框或者矩陣形式的實例(行):
#可以把mydata替換成sleep,延續上面的代碼 >newdata <- mydata[complete.cases(mydata),]
同樣的結果可以用na.omit函數獲得:
#可以把mydata替換成sleep,延續上面的代碼 >newdata <- na.omit(mydata)
兩行代碼表示的意思都是:mydata中所有包含缺失數據的行都被刪除,然后結果才存儲到newdata中,以后擬合就用新數據newdata.
處理含缺失值的數據集時,成對刪除常作為行刪除的備選方法使用。對于成對刪除,觀測只是當它含缺失數據的變量涉及某個特定分析時才會被刪除:
>cor(sleep,use = "pairwise.complete.obs")
函數mice()首先從一個包含缺失數據的數據框開始,然后返回一個包含多個(默認為5個)完整數據集的對象。
每個完整數據集都是通過對原始數據框中的缺失數據進行插補而生成的。
由于插補有隨機的成分,因此每個完整數據集都略有不同。
然后,with()函數可依次對每個完整數據集應用統計模型(如線性模型或廣義線性模型),最 后 ,pool()函數將這些單獨的分析結果整合為一組結果。
最終模型的標準誤和p值都將準確地反映出由于缺失值和多重插補而產生的不確定性。
>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
下圖為完整缺失值處理圖片:
補充:R語言讀取數據空值
1. 文件中的內容有雙引號,空值的時候是一對雙引號
filename.txt 文件內容形如:
"ID" "ITEM"
"1080254842" "漢字"
"1080254842" "中文"
"1080594798" ""
"1080594798" ""
導入數據:
test <-read.table("filename.txt",header=TRUE)
空值部分并不是NA,R語言不會把他識別為NA,改為下面的語句,即可解決。
test <-read.table("filename.txt",header=TRUE,na.strings = "")
2. 文件中內容無雙引號,空值即直接空白,形如下面:
ID ITEM
1080254842 漢字
1080254842 中文
1080594798
1080594798
導入數據:
test <-read.table("filename.txt",header=TRUE)
會出現錯誤:Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :3行沒有2元素
第三行第二元素沒有。
修改為如下即可:
test <-read.table("filename.txt",header=TRUE,fill=TRUE)
導入數據成功,但是,空值仍然不是NA,還需加上na.strings = "",
test <-read.table("filename.txt",header=TRUE, fill=TRUE, na.strings = "")
成功導入。
test <-read.csv("test.csv",header=TRUE,sep=",",na.strings = "")
其中:
header =TRUE
,表示把第一行作為標題。
sep=","
,因為csv文件的列是用逗號分開的,加上sep=","
,幫助R通過識別逗號來分割列。如果沒加,會出現原本多列數據導入后變為一列的情況。
na.strings = ""
:處理缺失值問題。
關于“R語言出現矩陣/缺失值怎么辦”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。