【问题标题】:How to subset dataframe on factor levels when NA are present存在 NA 时如何在因子级别上对数据帧进行子集化
【发布时间】:2020-07-06 23:13:23
【问题描述】:

我想在因子水平上对数据框进行子集化,但是当存在 NAs 时很难这样做。这是两个比较数据框,一个在因子列中没有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 中带有&lt;NA&gt; 的行被包括在内,而它不应该被包括在内;(ii)它旁边的值(即df2$f 下同一行上的值)是NA,而该值应该是2.33

我怎样才能干净而正确地对df2 进行子集化,结果是这样的:

      v    f
3   def 3.22
5   ghi 7.44 

【问题讨论】:

    标签: r subset na


    【解决方案1】:

    你可以使用下面这行代码

    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
    

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 1970-01-01
      • 2019-06-12
      • 2016-12-21
      • 1970-01-01
      • 2013-10-29
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多