如何使用dplyr进行反向滤波

时间:2017-03-19 19:40:10

标签: r dplyr

我正在尝试过滤nycflights13::flights数据,但我正在努力解决这个问题。

我希望过滤器删除包含dep_time数据的行和NA arr_time的行。但是,当我使用下面的代码时,它会过滤显示arr_time的dep_timeNA的广告投放,但我希望从整个数据集中删除该子集。

#filter(flights,!is.na(dep_time), is.na(arr_time))

我发现这可以使用基本功能,但是如果可能的话,想要学习如何使用dplyr过滤器

#flights[-which(!is.na(flights$dep_time) & is.na(flights$arr_time)), ]

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

与基本子集不同,dplyr的filter仅允许您指定要保留的内容,而不是要删除的内容。所以你必须采用你的谓词的补充。根据德莫根定律,你的情况应如下:

flights %>% filter(is.na(dep_time) | !is.na(arr_time))

您可以使用base-r条件对其进行测试:

all.equal(
  flights[-which(!is.na(flights$dep_time) & is.na(flights$arr_time)), ],
  flights[which(is.na(flights$dep_time) | !is.na(flights$arr_time)), ]
)
# [1] TRUE