Почему я теряю свои NA после подсчета и фильтра (dplyr) - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть следующий фрейм данных, который я создаю после подсчета:

df <- structure(list(Procedure_priority = structure(c(4L, 1L, 2L, 3L, NA, 5L),
                                                    .Label = c("A", "B", "C", "D", "-1"), 
                                                    class = "factor"), n = c(10717L, 4412L, 2058L, 1480L, 323L, 2L)), 
                class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -6L), .Names = c("Procedure", "n"))


# A tibble: 6 x 2
  Procedure     n
  <fct>     <int>
1 D         10717
2 A          4412
3 B          2058
4 C          1480
5 <NA>        323
6 -1            2

Я хочу отфильтровать «-1».Но если я сделаю фильтр на «-1», я также потеряю свой NA.То есть:

df %>% 
  filter(Procedure!="-1")

# A tibble: 4 x 2
  Procedure     n
  <fct>     <int>
1 D         10717
2 A          4412
3 B          2058
4 C          1480

Мне нужны мои NA.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

На ваш вопрос уже дан ответ, но если у вас более короткий список (то есть вы не просто исключаете одно значение), вы можете использовать %in% и при этом сохранять NA.

# Keep A, D, and NA; aka dropping B, C, and -1
keep_these_procs <- c("A", "D", NA)

df %>%
  filter(Procedure %in% keep_these_procs)
0 голосов
/ 14 февраля 2019

Из файла справки фильтра ()

... Сохраняются только строки, в которых условие оценивается как ИСТИНА ...

NA != -1
[1] NA

Посколькуусловие возвращает NA (следовательно, не TRUE), вам нужно второе условие ИЛИ:

df %>% 
  filter(Procedure != -1 | is.na(Procedure))
...