Skip to main content
 首页 » 编程设计

R语言dplyr包的聚集函数summarise 和 summarise_each

2022年07月19日131birdshome

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设置输出变量名称。


本文参考链接:https://blog.csdn.net/neweastsun/article/details/116902824
阅读延展