web-dev-qa-db-ja.com

dplyr :: filter()によるNA観測の削除

私のデータは次のようになります。

_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)
_

NAを削除するためにtidyrの特別な関数を使用する必要があるのはなぜですか?

24
emehex

@Ben Bolkerから:

[T]彼はdplyr :: filter()とは特に関係ありません

@Marat Talipovから:

[A] NA == NAを含むNAとの比較はNAを返します

@farnsyによる 関連する回答 から:

==演算子は、期待どおりにNAを処理しません。

NAは「何がそこにあるのかわかりません」という意味だと考えてください。欠損値が3より大きいかどうかわからないため、3> NAの正解は明らかにNAです。まあ、それはNA == NAでも同じです。どちらも欠損値ですが、真の値はまったく異なる可能性があるため、正しい答えは「わかりません」です。

Rはあなたが分析で何をしているのかを知らないので、後になってあなたを困惑させるようなバグを潜在的に導入する代わりに、比較演算子がNAを値だと考えることを許可しません。

21
emehex

例えば:

次を使用できます。

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

列aのNAを削除します。

24
JeffZheng