R-如何使用dplyr损失NA行过滤数据



如何在不丢失na行的情况下亚集数据?

使用逻辑索引上述帖子。有没有办法在dplyr?

另外, dplyr何时会自动删除NAS?在我的经验中,它会在我过滤特定的字符串时删除Na,例如:

b = a %>% filter(col != "str")

我认为这不会排除NA值,但确实如此。但是,当我使用其他过滤格式时,它不会自动排除NA,例如:

b = a %>% filter(!grepl("str", col))

我想了解过滤器的此功能。我将不胜感激任何帮助。谢谢!

dplyr::filter的文档说..."与基本子集不同,条件评估为na的行。"

NA != "str"评估NA,因此被filter删除。

!grepl("str", NA)返回TRUE,因此保留。

如果您要filter保留NA,则可以执行filter(is.na(col)|col!="str")

如果要保持NAS由创建em> filter条件您可以简单地将条件 nas nas使用replace_na="> tidyr 。

a <- data.frame(col = c("hello", NA, "str"))
a %>% filter((col != "str") %>% replace_na(TRUE))

我只是遇到了这个问题。这很容易错过,我必须说我发现这种行为有些不直觉。根据QWR的答案,从现在开始,这已成为我所有项目的主食:

filter_na <- function(tbl, expr){
   tbl %>% filter({{expr}} %>% replace_na(T))
}

最新更新