library(tidyverse)
library(nycflights13)
nycflights13::flights
如果以下表达式每天从数据集中提供航班:
daily <- dplyr::group_by( flights, year, month, day)
(per_day <- dplyr::summarize( daily, flights = n()))
我希望取消航班的类似内容:
canx <- dplyr::filter( flights, is.na(dep_time) & is.na(arr_time))
canx2 <- canx %>% dplyr::group_by( year, month, day)
我的目标是拥有与所有汇总航班相同的数据框长度。
我每天都可以取消航班数量:
(canx_day <- dplyr::summarize( canx2, flights = n()))
但显然这是一个稍短的数据框,所以我无法运行例如:
canx_day$propcanx <- per_day$flights/canx_day$flights
即使我介绍了NA,我也可以替换它们。
所以我的问题是,如果我不使用过滤器,或者是否有过滤我应该应用的参数?
非常感谢
答案 0 :(得分:3)
您不应该使用filter
。正如其他人所说,使用canceled
列很容易,因此我们的第一步是创建该列。然后,您可以使用单个summarize
轻松获得所需内容。例如:
flights %>%
mutate(canceled = as.integer(is.na(dep_time) & is.na(arr_time))) %>%
group_by(year, month, day) %>%
summarize(n_scheduled = n(),
n_not_canceled = sum(!canceled),
n_canceled = sum(canceled),
prop_canceled = mean(canceled))
# # A tibble: 365 x 7
# # Groups: year, month [?]
# year month day n_scheduled n_not_canceled n_canceled prop_canceled
# <int> <int> <int> <int> <int> <int> <dbl>
# 1 2013 1 1 842 838 4 0.004750594
# 2 2013 1 2 943 935 8 0.008483563
# 3 2013 1 3 914 904 10 0.010940919
# 4 2013 1 4 915 909 6 0.006557377
# 5 2013 1 5 720 717 3 0.004166667
# 6 2013 1 6 832 831 1 0.001201923
# 7 2013 1 7 933 930 3 0.003215434
# 8 2013 1 8 899 895 4 0.004449388
# ...
答案 1 :(得分:0)
这为您提供flight, year, month, day
nycflights13::flights %>%
group_by(flight, year, month, day) %>%
summarize(per_day = n(),
canx = sum(ifelse(is.na(arr_time), 1, 0)))
答案 2 :(得分:-2)
有一种简单的方法可以计算每天取消的航班数量。让我们假设取消航班的Cancelled
列为TRUE
。如果是这样,那么计算每日取消航班的方式将是:
flights %>%
group_by(year, month, day) %>%
summarize( canx_day = sum(Cancelled))
canx_day
将包含一天取消的航班。