当不存在NA时如何在因子水平上对数据框进行子集

问题描述 投票:0回答:1

我想在因子水平上对数据框进行子集化,但是当存在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)包含<NA>中带有df2$v的行,但不应包含;(ii)紧随其后的值(即df2$f下同一行的值)是NA,而该值应为2.33

我如何清晰,正确地将df2子集化,结果是这样的:

      v    f
3   def 3.22
5   ghi 7.44 
r subset na
1个回答
0
投票

您可以使用下面的代码行

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
© www.soinside.com 2019 - 2024. All rights reserved.