r - filter() 未按预期运行的奇怪案例
问题描述
我参考了 R 的数据科学书https://r4ds.had.co.nz/transform.html该程序检查每天有多少起飞时间早于 500 的航班。
从文字:
library(nycflights13)
library(tidyverse)
not_cancelled <- flights %>%
filter(!is.na(dep_delay), !is.na(arr_delay))
not_cancelled %>%
group_by(year, month, day) %>%
summarise(n_early = sum(dep_time < 500))
-> 365 x 4
但是,另一种代码:
library(nycflights13)
library(tidyverse)
not_cancelled <- flights %>%
filter(!is.na(dep_delay), !is.na(arr_delay))
not_cancelled %>%
group_by(year, month, day) %>%
select(year:day, dep_time) %>%
filter(dep_time < 500) %>%
count()
-> 不能产生相同的结果。相反,输出为 348 x 4。
我无法弄清楚原因。
解决方案
问题是第二个在产生结果之前删除了所有的零天。第一个有 17 天的计数为零,这是造成差异的原因。
library(nycflights13)
library(tidyverse)
not_cancelled <- flights %>%
filter(!is.na(dep_delay), !is.na(arr_delay))
tmp1 <- not_cancelled %>%
group_by(year, month, day) %>%
summarise(n_early = sum(dep_time < 500))
sum(tmp1$n_early == 0)
# [1] 17
tmp2 <- not_cancelled %>%
group_by(year, month, day) %>%
select(year:day, dep_time) %>%
filter(dep_time < 500) %>%
count()
sum(tmp2$n == 0)
# [1] 0
推荐阅读
- python - 如何合并每个都是字符串列表的行..不包括重复项
- string - FSharp F# 中的字符串编辑问题
- jenkins - 如何将 Jenkins DSL 管道命令设置为 groovy 中的变量?
- c# - 仅在存在时引用类库 - .NET Core
- c# - 字符串未被识别为具有相同格式的有效日期时间
- jquery - jQuery $(this) 关键字在插件中不起作用
- r - lapply 在数据框列表上的工作方式与单独应用于 dfs 的 FUN 不同
- sql-server - 将双精度值与 ISNULL 进行比较时的问题
- javascript - 另一个文件中的变量不会显示为
- 在购物车页面
- excel - 如何在命令按钮宏上使用 VBA 代码打开特定工作表?