R tidyverse示例代码中第二个group_by(month)的具体作用是什么?
R代码中第二个
group_by(month)的作用说明 你对前半段代码的理解是正确的,group_by(month, carrier) %>% summarise(n=n())执行后,会得到每个月每个航司对应的航班总量,结果的每一行唯一对应「月份+航司」的组合。
第二个group_by(month)的核心作用是:
明确重置后续操作的分组规则,仅按月份维度分组,保证后续
mutate计算时的统计范围符合预期。
具体可以从两个角度理解:
- 执行
mutate(prop=scales::percent(n/sum(n)))时,sum(n)的统计范围完全由当前的分组规则决定:按month分组时,sum(n)统计的是当前行所属月份的所有航司总航班量,最终得到的就是该航司当月航班量占当月总航班量的比例,符合代码的预期逻辑。 - 这是一种高兼容性、高可读性的严谨写法:
- 旧版本dplyr中
summarise执行后会默认解除所有分组,如果没有这行group_by(month),sum(n)会统计整个数据集所有月份所有航司的总航班量,得到的比例是航司全年占比,和预期不符。 - 即使新版本dplyr的
summarise默认会保留上层分组(仅移除最内层的carrier分组),显式写分组规则也能让其他读者立刻理解后续计算的聚合维度,不需要额外记忆dplyr的版本特性。
- 旧版本dplyr中
最后代码执行spread后得到的宽表,每一行是一个航司,每一列是一个月份,单元格值就是对应航司对应月份的航班量占比。
内容的提问来源于stack exchange,提问作者GiacomoDB
相关产品推荐
相关产品推荐

