簡體   English   中英

當 NA 存在時如何在因子水平上對數據框進行子集化

[英]How to subset dataframe on factor levels when NA are present

我想在因子級別上對數據框進行子集化,但是當NA存在時很難這樣做。 這是兩個比較數據框,一個在因子列中沒有NA ,一個在NA

df1 <- data.frame(v = c("ABC", "def", "ABC", "ghi"), 
                  f = c(4.11, 3.22, NA, 7.44))

df2 <- data.frame(v = c(NA, "ABC", "def", "ABC", "ghi"), 
                  f = c(2.33, 4.11, 3.22, NA, 7.44))

df1 ,因子級別的子集效果很好。 例如:

df1[!df1$v == "ABC",]
    v    f
2 def 3.22
4 ghi 7.44

相比之下, df2子集化充滿了問題:

df2[!df2$v == "ABC",]
      v    f
NA <NA>   NA
3   def 3.22
5   ghi 7.44

問題是雙重的:(i) df2$v帶有<NA>的行被包含,而它不應該包含在內,(ii) 它旁邊的值(即df2$f下同一行的值)是NA而該值應為2.33

我如何干凈正確地對df2子集化,以便結果是這樣的:

      v    f
3   def 3.22
5   ghi 7.44 

您可以使用以下代碼行

df2[!(df2$v == "ABC") & !is.na(df2$v), ]

#     v    f
# 3 def 3.22
# 5 ghi 7.44

或者這行,我更喜歡,因為我不必輸入幾個額外的括號

df2[df2$v != "ABC" & !is.na(df2$v), ]

#     v    f
# 3 def 3.22
# 5 ghi 7.44

暫無
暫無

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

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