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

基于nycflights13数据,如何用group_by分组carrier后筛选US分组满足>1条件

按Carrier分组后筛选特定分组的解决方案

嘿,看起来你已经搞定了数据加载和分组的基础操作!接下来要实现的是在按carrier分组后,筛选出carrier为US且满足某个分组级条件(比如该组记录数>1)的分组,我分两种常见场景给你具体的代码和解释:

场景1:筛选Carrier为US且分组记录数>1的组

如果你的需求就是保留carrier为US的分组,同时确保该组的记录数量大于1(其实US航空公司的航班数远不止1,这个条件更多是给你演示分组级筛选的逻辑),可以用filter()配合dplyr的分组函数n()来实现:

library(nycflights13)
library(dplyr) # 别忘了加载dplyr,%>%、group_by这些函数都靠它

data <- flights
data %>% 
  group_by(carrier) %>% 
  filter(carrier == "US", n() > 1) # n()会返回当前分组的总记录数

场景2:筛选Carrier为US且分组统计指标>1的组

如果你的“>1”是指其他统计指标(比如该航空公司的平均起飞延误时间大于1分钟),这里有两种实现方式,看你偏好哪种:

方式1:先计算分组指标再筛选(逻辑更清晰)

先通过summarise()算出每个航空公司的平均延误,再筛选符合条件的组:

data %>% 
  group_by(carrier) %>% 
  summarise(avg_dep_delay = mean(dep_delay, na.rm = TRUE)) %>% # 计算平均延误,忽略缺失值
  filter(carrier == "US", avg_dep_delay > 1)

方式2:直接在分组后筛选(无需提前汇总)

如果你不想先生成汇总表,也可以直接在filter()里用聚合函数判断分组条件:

data %>% 
  group_by(carrier) %>% 
  filter(carrier == "US", mean(dep_delay, na.rm = TRUE) > 1)

小提醒

  • 一定要记得加载dplyr包哦,不然%>%、group_by这些函数会报错;
  • n()是dplyr专门用来获取当前分组行数的函数,非常实用;
  • 如果你的“>1”是其他条件,只需要把代码里的n()>1或者mean(dep_delay,...)>1替换成你需要的聚合条件就行啦。

内容的提问来源于stack exchange,提问作者Brandon Jablon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:52:55