You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:02:42