关于R语言中dplyr包 summarize() 函数 .groups 参数的解释(You can override using the `.groups` argument.)

1.问题描述

在使用summarize()进行汇总时会出现一条有关.groups的报错信息,查阅R的帮助文档后不明所以,网上的相关解决办法只能另报错消失却对原因解释不清。
在这里插入图片描述
在这里插入图片描述

2.问题成因

这个问题的出现与group_by()对数据进行分组后,summarize()函数在运行时对分组结构的理解有关。

  • 当利用group_by()通过多个变量进行分组时,会按顺序形成一个从上到下的嵌套结构
  • 而在使用summarize()函数对数据进行汇总时,summize()需要知道在汇总结束后如何处理该排序结构
  • 如果不能告诉summarize()如何处理该结构则会出现报错的情况
 summarise()` has grouped output by 'year'. You can override using the `.groups` argument. 

3.不同参数与对应的处理

.groups的主要参数有4个:

  • drop_last:汇总结束后,将当前数据集的最低一级分组结构删除
  • drop:汇总结束后,将当前数据集所有的分组结构删除,数据集回到之前未分组的状态
  • keep:汇总结束后,保留数据集当前的分组结构,即当前的分组状态
  • rowwiese:字面上理解是每一行作为一组,实际上是指将原有的分组结构删除,以汇总变量作为依据重新分组

4.以实现“循序渐进分析”为例对参数进行展示

  • 数据来自nycflight13
library(nycflight13)
  • 使用group_byyearmonthday进行分组
  • 形成year → \rightarrow month → \rightarrow day的分组结构
daily <- group_by(flights, year, month, day)
  • 将数据按天进行计数
  • 同时将day这一分组层级删掉,为按月分组做准备
(per_day <- summarize(daily, flights = n(), .groups = "drop_last"))

A grouped_df: 365 × 4
year	month	day	flights
<int>	<int>	<int>	<int>
2013	1	1	842
2013	1	2	943
2013	1	3	914
2013	1	4	915
2013	1	5	720
2013	1	6	832
2013	1	7	933
2013	1	8	899
2013	1	9	902
2013	1	10	932
2013	1	11	930
2013	1	12	690
2013	1	13	828
2013	1	14	928
2013	1	15	894
2013	1	16	901
2013	1	17	927
2013	1	18	924
2013	1	19	674
2013	1	20	786
2013	1	21	912
2013	1	22	890
2013	1	23	897
2013	1	24	925
2013	1	25	922
2013	1	26	680
2013	1	27	823
2013	1	28	923
2013	1	29	890
2013	1	30	900
⋮	⋮	⋮	⋮
2013	12	2	1004
2013	12	3	973
2013	12	4	958
2013	12	5	969
2013	12	6	970
2013	12	7	691
2013	12	8	875
2013	12	9	962
2013	12	10	943
2013	12	11	954
2013	12	12	968
2013	12	13	970
2013	12	14	692
2013	12	15	880
2013	12	16	964
2013	12	17	949
2013	12	18	956
2013	12	19	974
2013	12	20	980
2013	12	21	811
2013	12	22	895
2013	12	23	985
2013	12	24	761
2013	12	25	719
2013	12	26	936
2013	12	27	963
2013	12	28	814
2013	12	29	888
2013	12	30	968
2013	12	31	776

  • 对数据按月求和,并将month这一层级删除
(per_month <- summarize(per_day, flights = sum(flights), .groups = "drop_last")

A grouped_df: 12 × 3
year	month	flights
<int>	<int>	<int>
2013	1	27004
2013	2	24951
2013	3	28834
2013	4	28330
2013	5	28796
2013	6	28243
2013	7	29425
2013	8	29327
2013	9	27574
2013	10	28889
2013	11	27268
2013	12	28135
 
  • 对数据按年求和
  • 此时分组的层级已到最高层级,相当于没有分层结构,所以无需设置.groups参数
(per_year <- summarize(per_month, flights = sum(flights)))

A tibble: 1 × 1
flights
<int>
336776

猜你喜欢

转载自blog.csdn.net/Y1575071736/article/details/119277403