上面的子集使用逻辑索引.有没有办法在dplyr中做到这一点?
此外,什么时候dplyr会自动删除NAs?根据我的经验,当我过滤掉特定字符串时,它会删除NA,例如:
b = a %>% filter(col != "str")
Run Code Online (Sandbox Code Playgroud)
我认为这不会排除NA价值,但确实如此.但是当我使用其他格式的过滤时,它不会自动排除NA,例如:
b = a %>% filter(!grepl("str", col))
Run Code Online (Sandbox Code Playgroud)
我想了解过滤器的这个功能.我将不胜感激任何帮助.谢谢!
说明的文档dplyr::filter......"与基本子集不同,条件评估为NA的行将被删除."
NA != "str"NA因此被评估为filter.
!grepl("str", NA)返回TRUE,所以保持.
如果你想filter保留NA,你可以做到filter(is.na(col)|col!="str")
如果您想保留由过滤条件创建的 NA,您可以简单地使用replace_nafrom tidyr将条件 NA 转换为TRUE。
a <- data.frame(col = c("hello", NA, "str"))
a %>% filter((col != "str") %>% replace_na(TRUE))
Run Code Online (Sandbox Code Playgroud)