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