簡體   English   中英

使用 dplyr::filter() 刪除 NA 觀察

[英]Removing NA observations with dplyr::filter()

我的數據如下所示:

library(tidyverse)

df <- tribble(
    ~a, ~b, ~c,
    1, 2, 3, 
    1, NA, 3, 
    NA, 2, 3
)

我可以使用drop_na()刪除所有NA觀察:

df %>% drop_na()

或刪除所有NA觀測在單個列( a為例):

df %>% drop_na(a)

為什么我不能只使用普通的!=過濾器管道?

df %>% filter(a != NA)

為什么我們必須使用 tidyr 的特殊函數來刪除 NAs?

例如:

您可以使用:

df %>% filter(!is.na(a))

刪除 a 列中的 NA。

來自@Ben Bolker:

[T]他與 dplyr::filter() 沒有特別的關系

來自@Marat Talipov:

[A]任何與NA的比較,包括NA==NA,都會返回NA

來自@farnsy 的相關回答

== 運算符不會像您期望的那樣處理 NA。

將 NA 視為“我不知道那里有什么”的意思。 3 > NA 的正確答案顯然是 NA,因為我們不知道缺失值是否大於 3。 嗯,對於 NA == NA 也是一樣。 它們都是缺失值,但真實值可能大不相同,因此正確答案是“我不知道”。

R 不知道您在分析中正在做什么,因此與其潛在地引入后來最終會發布讓您尷尬的錯誤,不如讓比較運算符認為 NA 是一個值。

如果 2020 年有人在這里,在制作完所有管道后,如果 u pipe %>% na.exclude將帶走管道中的所有 NA!

我總是使用它,它運行良好

cool$day[cool$day==''] <- NA
cool$day[is.na(cool$day)] <- "NA"

酷 <- 酷[!cool$day == "NA", ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM