我曾經在一個複雜的語句跨越dplyr::filter
的行爲無意中發現了一個的大數據幀,這基本上可以歸結爲治療NA
值:否定過濾條件給出與直覺相反的結果
df <- tibble(a = c(rep(1,3),
rep(NA, 3)))
A tibble: 6 x 1
a
<dbl>
1 1
2 1
3 1
4 NA
5 NA
6 NA
過濾對於等於行1給出了預期的結果:
df %>% filter(a == 1)
A tibble: 3 x 1
a
<dbl>
1 1
2 1
3 1
濾波行不等於1,我希望要返回的其餘3行的東風,然而這是不是這樣的,:
df %>% filter(!a == 1)
A tibble: 0 x 1
... with 1 variables: a <dbl>
因此,儘管在第一種情況下NA
被解釋爲不等於1,在第二種情況下,它被解釋爲等於1。有我在這裏失蹤邏輯?
我知道我可以使用%in%
來獲得期望的結果:
df %>% filter(!a %in% 1)
A tibble: 3 x 1
a
<dbl>
1 NA
2 NA
3 NA
但覺得奇怪,我使用該運營商只用一個元素(而不是矢量)。
所以我的問題給專家:這是filter
的預期行爲?否定過濾條件時,通常使用%in%
嗎?
好吧,我明白了。所以反直覺行爲(至少對我來說)是'=='在數據值爲'NA'時產生'NA'。我寧願期望'a == 1'與'NA'數據產生'FALSE',因爲'NA'不等於1.我必須記住在這種否定條件下使用'%in%'。感謝您的回答! – user3460194