How to subset data in R without losing NA rows?
使用逻辑索引编制上述子集的帖子。 有没有办法在dplyr中执行此操作?
另外,什么时候dplyr会自动删除NA?根据我的经验,当我过滤掉特定的字符串时会删除NA,例如:
b = a %>% filter(col != "str")
我认为这不会排除NA
值,但确实如此。但是当我使用其他格式的过滤时,它不会自动排除NA
,例如:
b = a %>% filter(!grepl("str", col))
我想了解过滤器的这个功能。我将不胜感激任何帮助。谢谢!
答案 0 :(得分:8)
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:9987
ACCEPT tcp -- anywhere anywhere tcp dpt:30033
ACCEPT tcp -- anywhere anywhere tcp dpt:search
ACCEPT tcp -- anywhere anywhere tcp dpt:2008
ACCEPT tcp -- anywhere anywhere tcp dpt:10011
ACCEPT udp -- anywhere anywhere udp dpt:9987
ACCEPT udp -- anywhere anywhere udp dpt:30033
ACCEPT udp -- anywhere anywhere udp dpt:2010
ACCEPT udp -- anywhere anywhere udp dpt:2008
ACCEPT udp -- anywhere anywhere udp dpt:10011
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp spt:9987
ACCEPT tcp -- anywhere anywhere tcp dpt:9987
ACCEPT udp -- anywhere anywhere udp dpt:9987
的文档说......“与基本子集不同,条件评估为NA的行将被删除。”
dplyr::filter
评估为NA != "str"
,因此被NA
删除。
filter
会返回!grepl("str", NA)
,因此会保留。
如果您希望TRUE
保留filter
,您可以NA
答案 1 :(得分:0)
如果要保留由过滤条件创建的NAs,只需使用 tidyr 中的replace_na
将条件NAs转换为TRUE。
a <- data.frame(col = c("hello", NA, "str"))
a %>% filter((col != "str") %>% replace_na(TRUE))