代码之家  ›  专栏  ›  技术社区  ›  Chris Ruehlemann

当存在NA时,如何在因子级别上对数据帧进行子集

  •  0
  • Chris Ruehlemann  · 技术社区  · 4 年前

    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
    

    问题有两方面:(一)与 <NA> df2$v 包含而不应包含和(ii)旁边的值(即 df2$f 不适用 2.33 .

    我怎样才能子集 df2型 干净利落,结果如下:

          v    f
    3   def 3.22
    5   ghi 7.44 
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Ric S    4 年前

    您可以使用以下代码行

    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