Как установить подкадр данных на уровень факторов, когда присутствует NA - PullRequest
1 голос
/ 26 марта 2020

Я бы хотел поместить подкадр данных на уровни факторов, но изо всех сил стараюсь сделать это, когда присутствует NA s. Вот два сравнительных фрейма данных, один без 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> in df2$v включен, тогда как он не должен и (ii) значение рядом с ним (то есть значение в той же строке в df2$f) равно NA, тогда как это значение должно быть 2.33.

Как я могу правильно и правильно задать подмножество df2, чтобы результат был следующим:

      v    f
3   def 3.22
5   ghi 7.44 

1 Ответ

1 голос
/ 26 марта 2020

Вы можете использовать следующую строку кода

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
...