函数 .groups 参数的解释(You can override using the `.groups` argument.)"/>
关于R语言中dplyr包 summarize() 函数 .groups 参数的解释(You can override using the `.groups` argument.)
文章目录
- 1.问题描述
- 2.问题成因
- 3.不同参数与对应的处理
- 4.以实现“循序渐进分析”为例对参数进行展示
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_by
对year
、month
、day
进行分组 - 形成
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
更多推荐
关于R语言中dplyr包 summarize() 函数 .groups 参数的解释(You can override using the `.groups` a
发布评论