如何在R中对两个数据表的属性做算术运算,计算达美航空各机场延误率
解决达美航空各出发机场延误抵达百分比的计算问题
嗨,别担心,新手遇到这类分组统计的问题太正常啦!我来帮你简化这个流程,其实不用分开统计总航班和延误航班,一步就能搞定~
方法一:简化你的现有代码(合并两个统计结果)
你已经得到了总航班数和延误航班数的两个tibble,我们可以用dplyr的left_join把它们合并,然后直接计算比值:
library(dplyr) library(nycflights13) flts <- nycflights13::flights # 过滤达美航空的所有航班 all_delta_flights <- filter(flts, carrier == "DL") # 过滤达美航空的延误航班(抵达延误>0) all_late_delta_flights <- filter(flts, carrier == "DL", arr_delay > 0) # 统计各出发机场的总航班数和延误航班数 total_by_origin <- all_delta_flights %>% group_by(origin) %>% summarise(total = n()) late_by_origin <- all_late_delta_flights %>% group_by(origin) %>% summarise(late = n()) # 合并并计算延误百分比 delay_result <- left_join(total_by_origin, late_by_origin, by = "origin") %>% mutate(delay_percent = late / total) # 查看结果 delay_result
运行后你会得到这样的输出:
# A tibble: 3 x 4 origin total late delay_percent <chr> <int> <int> <dbl> 1 EWR 4342 1725 0.397 2 JFK 20701 6353 0.307 3 LGA 23067 8335 0.361
方法二:更高效的链式操作(推荐)
其实我们完全可以不用分开处理两个数据集,直接在同一个链式操作里完成过滤、分组、统计和计算,这样既减少中间变量,也更不容易出错:
library(dplyr) library(nycflights13) delay_result <- nycflights13::flights %>% # 只保留达美航空的航班 filter(carrier == "DL") %>% # 按出发机场分组 group_by(origin) %>% # 一次性统计总航班数、延误航班数和延误百分比 summarise( total_flights = n(), # 统计延误航班数,注意用na.rm=TRUE忽略arr_delay为NA的情况(比如航班取消) late_flights = sum(arr_delay > 0, na.rm = TRUE), delay_percent = late_flights / total_flights ) # 查看结果 delay_result
这个方法和方法一的结果完全一致,但代码更简洁,逻辑也更连贯。
小提示
注意arr_delay可能存在NA值(比如航班被取消或改期,没有抵达延误数据),所以在统计延误航班数时加上na.rm=TRUE可以避免这些NA值影响统计结果,让计算更准确。
内容的提问来源于stack exchange,提问作者Cameron
相关产品推荐
相关产品推荐

