R語言中的特殊值及缺失值NA的處理方法

2022-01-30 小汪Waud

R語言中存在一些null-able values,當我們進行數據分析時,理解這些值是非常重要的。

通常來說,R語言中存在:

這四種數據類型在R中都有相應的函數用以判斷。

NA

NA即Not available,是一個長度為1的邏輯常數,通常代表缺失值。NA可以被強制轉換為任意其他數據類型的向量。

> a <- NA
> class(a)
[1] "logical"
> length(a)
[1] 1

可以採用is.na()進行判斷。另外,NA和「NA」不可以互換。

NULL

NULL是一個對象(object),當表達式或函數產生無定義的值或者導入數據類型未知的數據時就會返回NULL。

> b <- NULL
> class(b)
[1] "NULL"
> length(b)
[1] 0

可以採用is.null()進行判斷。

NaN

NaN即Not A Number,是一個度為1的邏輯值向量

> c <- NaN
> class(c)
[1] "numeric"
> length(c)
[1] 1
> is.finite(c)
[1] FALSE

可以採用is.nan()進行判斷。另外,我們可以採用is.finite()或is.infinite()函數來判斷元素是有限的還是無限的,而對NaN進行判斷返回的結果都是False。

Inf/-Inf

Inf即Infinity無窮大,通常代表一個很大的數或以0為除數的運算結果,Inf說明數據並沒有缺失(NA)。

> d <- Inf
> class(d)
[1] "numeric"
> length(d)
[1] 1

可以採用is.finite()或is.finite()進行判斷。

缺失值NA的處理

理解完四種類型數值以後,我們來看看該採取什麼方法來處理最常見的缺失值NA。

小白學統計在推文《有缺失值怎麼辦?系列之二:如何處理缺失值》裡說「處理缺失值最好的方式是什麼?答案是:沒有最好的方式。或者說,最好的方式只有一個,預防缺失,儘量不要缺失。

1 直接刪除法

在缺失數很少且數據量很大的時候,直接刪除法的效率很高,而且通常對結果的影響不會太大。

如數據框df共有1000行數據,有10行包含NA,不妨直接採用函數na.omit()來去掉帶有NA的行,也可以使用tidyr包的drop_na()函數來指定去除哪一列的NA。

drop_na(df,X1) # 去除X1列的NA

2 填充法

用其他數值填充數據框中的缺失值NA。

2.1 df[is.na(df)]
df[is.na(df)] = 0

2.2 replace_na()

使用tidyr包的replace_na()函數。

replace_na(df$X1,5) # 把df的X1列中的NA填充為5

2.3 fill()

使用tidyr包的fill()函數將上/下一行的數值填充至選定列中NA。

fill(df,X1,.direction = "up") # 將NA下一行的值填充到df的X1列中的NA

除此之外,類似原理的填充法還有均值填充法(用該變量的其餘數值的均值來填充)、LOCF(last observation carried forward)、BOCF(baseline observation carried forward)、WOCF(worst observation carried forward)等。

3 虛擬變量法

當分類自變量出現NA時,把缺失值單獨作為新的一類。

在性別中,只有男和女兩類,虛擬變量的話以女性為0,男性為1。如果出現了缺失值,可以把缺失值賦值為2,單獨作為一類。由於將缺失值賦值,在統計時就不會把它當做缺失值刪除,避免了由於這一個變量缺失而導致整個觀測值被刪除的情況。

4 回歸填補法

假定有身高和體重兩個變量,要填補體重的缺失值,我們可以把體重作為因變量,建立體重對身高的回歸方程,然後根據身高的非缺失值,預測體重的缺失值。


參考資料:

謝俊飛《R語言中特殊值NaN、Inf 、NA、NULL》https://www.jianshu.com/p/9cf36b084e83《R null values: NULL, NA, NaN, Inf》https://www.r-bloggers.com/2018/07/r-null-values-null-na-nan-inf/小白學統計《有缺失值怎麼辦?系列之二:如何處理缺失值》https://mp.weixin.qq.com/s/G8NJdID9w6YxVp4JDNKO9Q

相關焦點

  • NA缺失值處理R語言
    在處理一份數據,隨距離變化的記錄值,有NA缺失,非連續行缺失。針對這種最簡單的就是取 前後值的均值 填充到NA位置。
  • R語言初級教程: NA、Inf、NaN、NULL 特殊值
    >> is.nan(2)[1] FALSE> is.nan(NA)     ## 缺失值NA不是非數值[1] FALSE> is.nan(0/0)[1] TRUE3.NANA表示缺失值(Missing value),我們將會經常碰到這個值。你可能想知道向量中是否有缺失值。對於這個問題,有人說用 ==關係運算符就行了,是這樣嗎?
  • R語言如何檢測和處理數據缺失值?
    面對一份數據,我們會做數據的缺失值檢測和分析,根據數據的缺失程度,以知道數據的完整性和可用性。實際的數據,絕大部分會有缺失值現象。缺失值的產生與諸多因素有關聯,例如:數據採集不成功,數據採集成功了但是數據確實沒有值,數據的值受其它因素控制等。面對有缺失值的數據,我們要怎麼處理、分析和應用,是我們數據工作者要思考和實踐的命題。
  • 數據分析|R-缺失值處理
    數據中往往會有各種缺失值,異常值,錯誤值等,今天先介紹一下如何處理缺失值,才能更好的數據分析,更準確高效的建模。一 查看數據集的缺失情況    R中使用NA代表缺失值,用is.na識別缺失值,返回值為TRUE或FALSE。由於邏輯值TRUE和FALSE分別等價於數值1和0,可用sum()和mean()來獲取數據集的缺失情況。
  • 運用R進行缺失值填補
    2.MNAR:非隨機缺失,在這種情況下,你可能需要去檢查數據的收集過程並且試著理解數據為什麼會丟失。例如,大多數人在一項調查中不回答某個問題,可能是因為問題敏感而特意迴避不回答,就屬於非隨機缺失。假設數據缺失的類型是MCAR,過多的數據丟失也是一個問題。通常,一個可靠的最大閾值是數據集總數的5%。如果某些特徵或樣本缺失的數據超過了5%,你可能需要忽略掉這些特徵或樣本。
  • R語言統計與繪圖:均值插補法處理缺失數據
    在臨床研究中,缺失數據的現象是極其普遍的。數據缺失的原因有很多種,可能是數據錄入錯誤、研究設計不合理、患者失訪或者不配合等等。數據缺失會對研究結果的準確性產生偏倚,為了避免缺失數據的影響,研究者會採用各種統計方法來處理缺失數據。
  • R語言刪除指定列(變量)中帶NA值的行(觀察對象)
    想要刪除含有缺失值的行(hang)在前面已經介紹過R語言識別、刪除包含缺失值的行,識別功能很強大,可以識別所有變量
  • 樣本缺失值處理,你真的操作對了嗎?
    我在數據清理與探索性分析中遇到的最常見問題之一就是處理缺失數據。首先我們需要明白的是,沒有任何方法能夠完美解決這個問題。不同問題有不同的數據插補方法——時間序列分析,機器學習,回歸模型等等,很難提供通用解決方案。在這篇文章中,我將試著總結最常用的方法,並尋找一個結構化的解決方法。在討論數據插補方法之前,我們必須了解數據丟失的原因。
  • Kaggle知識點:缺失值處理
    寫在前面在進行數據競賽中,數據預處理階段經常需要對數據進行缺失值處理。關於缺失值的處理並沒有想像中的那麼簡單。以下為一些經驗分享,基本涵蓋了大部分處理方式。這樣做的好處是,D的係數可以被解釋成「在控制了其他變量的情況下,X具缺失數據的個體其Y的預測值減去具X平均數的個體於Y的預測值」缺失值插補相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數據補上,從而形成完整的數據記錄,對於後續的數據處理、分析和建模至關重要。常用的補全方法如下。
  • R語言基礎
    NaN表示數字的缺失值,NA可以表示數字缺失值、字符缺失值等判斷是否有缺失值:is.na()/is.nan()> x <- c(1, NaN, 2, NA, 3) > is.na(x) [1] FALSE  TRUE FALSE  TRUE FALSE > is.nan(x) [1] FALSE  TRUE FALSE FALSE FALSE
  • 「統計實戰」缺失值識別與處理
    關注我的,分析數據不發愁了不信你試試後臺留言,獲取統計軟體在科學研究中,缺失值通常難以避免,但處理起來又比較麻煩,很多人選擇忽略缺失值,但有些時候它們會不知不覺給我們造成麻煩,學幾招缺失值識別和處理的技術還是很有必要的。
  • 【收藏】超詳細的 R 語言插補缺失值教程~
    在分析數據集時,常常會碰到一些缺失值,如果缺失值的數量相對總體來說非常小,那麼直接刪除缺失值就是一種可行的方法。但某些情況下,直接刪除缺失值可能會損失一些有用信息,此時就需要尋找方法來補全缺失值。今天小編給大家介紹一個用來處理缺失值的 R 包——MICE,本文為譯文,原文連結[1]及參考文章[2]見文末。
  • R語言中如何刪除缺失數據
    在數據分析中,有時候需要將缺失數據進行刪除。刪除數據很有講究,比如多性狀模型分析時,個體ID1的y1性狀缺失,y2性狀不缺失,評估y1時,不僅可以通過親緣關係矩陣和固定因子進行評估,還可以根據y1和y2的遺傳相關進行評估,這時候,y1的缺失就不需要刪除。
  • 獨家 | 在機器學習中利用統計插補來處理缺失值(附代碼)
    數據有可能會含有缺失值,而這可能會導致多種機器學習算法出現問題。同樣地,在你對自己的預測任務進行建模之前,對數據每一列進行缺失值識別和替換是非常恰當的做法。這一步驟被稱為數據缺失值插補處理,或者簡稱插補。一種常見的數據缺失值插補方式是計算每一列的統計值(例如均值),並用這個值來替換該列所有的缺失值。
  • 【R函數學習】R語言時間序列函數整理
    按照時間名稱)timeSeries不會強制排序;其結果可以根據sort函數排序,也可以採用rev()函數進行逆序;參數recordIDs,可以給每個元素(行)標記一個ID,從而可以找回原來的順序#預設的時間有重複的時間點時zoo會報錯xts按照升序排列timeSeries把重複部分放置在尾部; #行合併和列合併#都是按照列名進行合併,列名不同的部分用
  • R語言從入門到精通:Day5-R語言數據操作示例及數據
    R語言提供了一個簡單而重要的函數is.na()來監測數據集中的缺失值。下面是該函數的一個使用實例。在識別和編碼了缺失值之後,我們該怎麼處理這些可惡的缺失值呢?缺失值的插補是一個非常複雜的問題,如果你的數據有很大一部分都是缺失值,你或許應該先去問問提供數據的人,為什麼會有缺失值。或者,等我們後續課程專門講解缺失值插補的操作。如果你的數據中只是存在很小一部分缺失值,直接刪除這些麻煩的缺失值是一個理想的選擇。
  • r語言 tseries - CSDN
    >zoo會報錯xts按照升序排列timeSeries把重複部分放置在尾部;#行合併和列合併#都是按照列名進行合併,列名不同的部分用NA代替cbind()rbind()merge() 列合併#取子集xts()默認將向量做成了矩陣;其他與常規向量或者矩陣沒有差別#缺失值處理
  • Pandas缺失值處理-判斷和刪除
    >缺失數據,在大部分數據分析中都很常見,Pandas在設計之時,就考慮了這種缺失值的情況並讓這種缺失數據處理任務變得輕鬆,構造了非常強大而又全面的缺失值處理方法,默認情況下,大部分的計算函數都會自動忽略數據集中的缺失值,在很多算法中,還是需要自行處理缺失值。
  • R語言常用數據處理代碼整理
    在收集好臨床數據,經過初步處理後,就可以導入到R軟體中去。R在進行統計分析前,常常需要對數據進行處理,使數據結構符合我們的統計需要,比如說變量因子化、創建新變量、變量類型轉化等等,因此數據處理是R進行統計分析前很重要的步驟。現基於各類R語言入門書整理R中常見的數據處理代碼。
  • R語言中計算樣本中位數的方法
    中位數的定義中位數是統計中描述數據集中趨勢的一個指標。簡單講中位數就是數據排序位於中間位置的值,記為Me,計算公式如下:計算中位數的公式中位數在統計學中的意義中位數描述數據中心位置,對於對稱分布的數據,均值接近中位數;偏態分布式指頻數分布不對稱