如何使用dplyr过滤数据而不丢失NA行

问题描述:

How to subset data in R without losing NA rows?如何使用dplyr过滤数据而不丢失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")

+0

该解决方案不会做,因为如果山坳!= “STR” 返回FALSE但is.na(COL)返回TRUE,它会被保留。所以过滤器失败。 我实际上在一个过滤器中使用了两个过滤器示例。所以它变成了b = a%>%filter(col!=“str1”,!grepl(“str2”,col))。这就是我所做的,但它也过滤掉NA ......这就是问题所在 –