为什么我在计数和过滤后丢失我的NA(dplyr)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我在计数和过滤后丢失我的NA(dplyr)相关的知识,希望对你有一定的参考价值。

我有一个计数后创建的以下数据框:

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。

答案

来自filter()的帮助文件

...只保留条件评估为TRUE的行...

NA != -1
[1] NA

由于您的条件返回NA(因此不是TRUE),您需要第二个OR条件:

df %>% 
  filter(Procedure != -1 | is.na(Procedure))
另一答案

你的问题已经回答了,但如果你有一个较短的清单(即,你不只是排除一个值),你可以使用%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)

以上是关于为什么我在计数和过滤后丢失我的NA(dplyr)的主要内容,如果未能解决你的问题,请参考以下文章

具有动态变量名称的 r dplyr 过滤器

使用dplyr将多个值设置为NA

在 R 中使用 dplyr 进行过滤时,为啥过滤掉的变量级别会保留在过滤后的数据中? [复制]

使用包 dplyr 的summerise

dplyr 管道中嵌套函数的执行顺序

使用dplyr计数和分组