我試圖過濾我的數據以省略某些值。問題是我想包括新手。當我使用不等於「!=」的運算符時,這些NA也被刪除。r,不等於,不包含nas不包括
a= c("A","C","B",NA,"C","A",NA,"B","A")
df = data.frame(a)
df2 <- df %>%
filter(a != "B")
df2
例如,我想DF2爲包括一切不等於B(A和C)和NA而不是僅A和C.
我試圖過濾我的數據以省略某些值。問題是我想包括新手。當我使用不等於「!=」的運算符時,這些NA也被刪除。r,不等於,不包含nas不包括
a= c("A","C","B",NA,"C","A",NA,"B","A")
df = data.frame(a)
df2 <- df %>%
filter(a != "B")
df2
例如,我想DF2爲包括一切不等於B(A和C)和NA而不是僅A和C.
我們可以在filter
函數中包含另一個條件,它將保留NA
的值:
df %>%
filter(a != "B" | is.na(a))
# a
# 1 A
# 2 C
# 3 <NA>
# 4 C
# 5 A
# 6 <NA>
# 7 A
從?NA
邏輯運算處理
NA
爲失蹤'TRUE/FALSE值...
還有更多的解釋,但你可以諮詢幫助文件。
NA
是從未等於任何東西。
NA == NA # NA, not TRUE
@ bouncyball的是推薦的解決方案,如果你要檢查,如果兩個值或變量實際上是一樣的,你可以使用identical
:利用圖書館purrr
df %>% filter(sapply(a,function(x){!identical(x,"B")}))
或略少醜
df %>% filter(map_lgl(a,~ !identical(.x,"B")))
感謝您提供這些附加信息。彈跳球的解決方案最適合當前需求,但這對未來將非常有幫助。 – TeslaStat
謝謝@bouncyball - NAS是否因爲被視爲R中的特殊值而被忽略,並且在使用!=時總是被註冊爲false? – TeslaStat
使用'!='時,它們總是被視爲'NA'。您可以使用例如'1!= NA'來測試自己,或者查看'?NA'上的幫助。 – Gregor
謝謝@格雷戈。這就說得通了。 !=只保留「TRUE」值,但NA顯示爲NA並正在丟棄。 – TeslaStat