dplyr包之分组动作 group_by()

本文介绍了R语言dplyr包中的group_by()函数,用于根据数据集中的变量进行分组操作。通过示例展示了如何使用group_by()对数据进行分组、汇总、合并等操作,并解释了其在数据处理中的作用。

Description

Most data operations are useful done on groups defined by variables in the the dataset. The group_by function takes an existing tbl and converts it into a grouped tbl where operations are performed "by group".

通过数据集中的变量构造分组是非常有用的。group_by函数接受现有的资源并将其转换为一个分组


group_by接受一下集中数据类型

使用方法

by_cyl <- group_by(mtcars, cyl)
summarise(by_cyl, mean(disp), mean(hp))
filter(by_cyl, disp == max(disp))
filter(by_cyl, disp == max(disp))
Source: local data frame [3 x 11]
Groups: cyl [3]


    mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1
2  24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2
3  10.4     8 472.0   205  2.93 5.250 17.98     0     0     3     4

返回每组中最大的disp的数据

> by_vs_am <- group_by(mtcars, vs, am)
> by_vs <- summarise(by_vs_am, n = n())
> by_vs
Source: local data frame [4 x 3]
Groups: vs [?]


     vs    am     n
  <dbl> <dbl> <int>
1     0     0    12
2     0     1     6
3     1     0     7
4     1     1     7
> summarise(by_vs, n = sum(n))
# A tibble: 2 × 2
     vs     n
  <dbl> <int>
1     0    18
2     1    14

至合并了一个分组

summarise(ungroup(by_vs), n = sum(n))
# A tibble: 1 × 1
      n
  <int>
1    32

把所有的分组数据擦除

 group_by(mtcars, vsam = vs + am)
Source: local data frame [32 x 12]
Groups: vsam [3]


     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb  vsam
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1   21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4     1
2   21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4     1
3   22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1     2
4   21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1     1
5   18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2     0
6   18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1     1

对两个变量的和进行分类

group_by(mtcars, vs2 = vs)
Source: local data frame [32 x 12]
Groups: vs2 [2]


     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb   vs2
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1   21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4     0
2   21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4     0
3   22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1     1
4   21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1     1
5   18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2     0
6   18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1     1

只对一个变量分组

groups(group_by(by_cyl, vs, am))
[[1]]
vs
[[2]]
am
查看分组数目

> groups(group_by(by_cyl, vs, am, add = TRUE))
[[1]]
cyl
[[2]]
vs
[[3]]
am
对分组后的数据在分组并将之间的分组也计算进来

 groups(group_by(by_cyl, cyl, cyl))
[[1]]
cyl

重复的分组会舍弃


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值