2017-10-16 127 views
1

我試圖過濾我的數據以省略某些值。問題是我想包括新手。當我使用不等於「!=」的運算符時,這些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.

+0

謝謝@bouncyball - NAS是否因爲被視爲R中的特殊值而被忽略,並且在使用!=時總是被註冊爲false? – TeslaStat

+1

使用'!='時,它們總是被視爲'NA'。您可以使用例如'1!= NA'來測試自己,或者查看'?NA'上的幫助。 – Gregor

+0

謝謝@格雷戈。這就說得通了。 !=只保留「TRUE」值,但NA顯示爲NA並正在丟棄。 – TeslaStat

回答

1

我們可以在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值...

還有更多的解釋,但你可以諮詢幫助文件。

0

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"))) 
+0

感謝您提供這些附加信息。彈跳球的解決方案最適合當前需求,但這對未來將非常有幫助。 – TeslaStat