我正在尝试过滤nycflights13::flights
数据,但我正在努力解决这个问题。
我希望过滤器删除包含dep_time数据的行和NA
arr_time
的行。但是,当我使用下面的代码时,它会过滤显示arr_time的dep_time
和NA
的广告投放,但我希望从整个数据集中删除该子集。
#filter(flights,!is.na(dep_time), is.na(arr_time))
我发现这可以使用基本功能,但是如果可能的话,想要学习如何使用dplyr过滤器
#flights[-which(!is.na(flights$dep_time) & is.na(flights$arr_time)), ]
感谢您的帮助。
答案 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