请教R语言中两段逻辑向量相关代码的差异及第二段代码含义
两段R代码的输出含义解析
原代码的作用
原代码按year, month, day分组后,计算的是当日延误航班的平均延误时长:
# Required packages library(tidyverse) library(nycflights13) flights |> group_by(year, month, day) |> summarize( behind = mean(arr_delay[arr_delay > 0], na.rm = TRUE), n = n(), .groups = "drop" )
arr_delay[arr_delay > 0]:只筛选出当日所有**实际延误(到达延迟>0分钟)**的航班的延误时长数据mean(..., na.rm = TRUE):对这些延误时长取平均值,同时忽略缺失值- 最终输出的
behind是分钟数,代表当日延误航班的平均延误时间
修改后代码的输出含义
你修改后的代码,输出的是当日有效航班中延误航班的占比:
# Required packages library(tidyverse) library(nycflights13) flights |> group_by(year, month, day) |> filter(!is.na(arr_delay)) |> summarize( behind = mean(arr_delay > 0) )
关键逻辑:
filter(!is.na(arr_delay)):先剔除掉arr_delay有缺失值的航班,只保留有效记录arr_delay > 0:对每个航班生成一个逻辑值——延误的航班返回TRUE,准点/提前的返回FALSE- 在R中,计算逻辑向量的均值时,
TRUE会被自动转换为1,FALSE转换为0。因此mean(arr_delay > 0)本质是「当日延误航班数 ÷ 当日有效航班总数」,结果是0到1之间的比例值(比如0.2代表当日20%的航班延误)
两者核心差异
- 原代码:聚焦延误航班群体,计算它们的平均延误时长(数值为分钟)
- 修改后代码:聚焦当日所有有效航班,计算延误航班的占比(数值为比例)
内容的提问来源于stack exchange,提问作者Samvit0
相关产品推荐
相关产品推荐

