dplyr包的聚集函数summarise 和 summarise_each

summarise 函数聚集一个向量返回单个值; summarise_each函数与 summarise功能类似,但对于同时使用多个函数时更清晰易懂。本文从两个方面比较两个聚集函数:操作变量数(单个变量和多个变量);操作变量函数(单个函数和多个函数)。因此共有四种情况,下面结合group_by函数进行详细讲解。

本文使用R自带的mtcars数据框。为了简化我们抽取其中三个变量:

mtcars <- mtcars %>% select(cyl , mpg, disp) 

单个变量应用单个函数

mtcars %>% summarise (mean_mpg = mean(mpg))
# result 
  mean_mpg
1 20.09062

带分组计算:

mtcars %>% 
  group_by(cyl) %>% 
  summarise (mean_mpg = mean(mpg))
#result
    cyl mean_mpg
* <dbl>    <dbl>
1     4     26.7
2     6     19.7
3     8     15.1

我们也可以使用summarise_each,但不够清晰:

mtcars %>% 
  group_by(cyl) %>% 
  summarise_each (funs(mean) , mean_mpg = mpg)
# result
    cyl mean_mpg
* <dbl>    <dbl>
1     4     26.7
2     6     19.7
3     8     15.1

单个变量应用多个函数

我们还是对比使用summarise和summarise_each两个函数。前者语法直接,后者更简洁。

mtcars %>% summarise (min_mpg = min(mpg), max_mpg = max(mpg))
# result
  min_mpg max_mpg
1    10.4    33.9
mtcars %>% group_by(cyl) %>% summarise (min_mpg = min(mpg), max_mpg = max(mpg))
# result
    cyl min_mpg max_mpg
* <dbl>   <dbl>   <dbl>
1     4    21.4    33.9
2     6    17.8    21.4
3     8    10.4    19.2

使用summarise_each函数:

mtcars %>% summarise_each (funs(min, max), mpg)
# 分组实现
mtcars %>% group_by(cyl) %>% summarise_each (funs(min, max), mpg)
# 指定函数名称的分组实现
mtcars %>% group_by(cyl) %>% summarise_each (funs(min_mpg = min, max_mpg = max), mpg)

一个函数操作多个变量

mtcars %>% summarise(mean_mpg = mean(mpg), mean_disp = mean(disp))
# result
  mean_mpg mean_disp
1 20.09062  230.7219
# summarise_each实现更简洁
mtcars %>% summarise_each(funs(mean) , mpg, disp)
# 分组情况
mtcars %>% group_by(cyl) %>% summarise(mean_mpg = mean(mpg), mean_disp = mean(disp))
# result
    cyl mean_mpg mean_disp
* <dbl>    <dbl>     <dbl>
1     4     26.7      105.
2     6     19.7      183.
3     8     15.1      353.

# summarise_each实现更简洁
mtcars %>% group_by(cyl) %>% summarise_each (funs(mean), mpg, disp)
# 指定名称的summarise_each实现
mtcars %>% group_by(cyl) %>% summarise_each(funs(mean) , mean_mpg = mpg, mean_disp = disp)

多个函数操作多个变量

与前面几种场景一样, summarise()函数更直接,并且可以通过max_mpg = max(mpg)指定输出变量名称。

使用summarise()函数:

mtcars %>% 
  summarise(min_mpg = min(mpg) , min_disp = min(disp), max_mpg = max(mpg) , max_disp = max(disp))
# 分组
mtcars %>% 
  group_by(cyl) %>% 
  summarise(min_mpg = min(mpg) , min_disp = min(disp), max_mpg = max(mpg) , max_disp = max(disp))

summarise_each函数实现:

mtcars %>% summarise_each(funs(min, max) , mpg, disp)
# 指定名称
mtcars %>% 
  summarise_each(funs(min, max) , mpg, disp) %>%
  setNames(c("min_mpg", "min_disp", "max_mpg", "max_disp"))
# 分组
mtcars %>% group_by(cyl) %>% summarise_each(funs(min, max) , mpg, disp)
# 指定名称
mtcars %>% 
  group_by(cyl) %>% 
  summarise_each(funs(min, max) , mpg, disp) %>%
  setNames(c("gear", "min_mpg", "min_disp", "max_mpg", "max_disp"))

总结

summarise() 语法简单,summarise_each() 语法更简洁。前者适合处理单个变量或单个函数。而多个变量或函数场景使用使用summarise_each()函数,并且提供setNames设置输出变量名称。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值