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设置输出变量名称。
本文探讨了R语言中用于数据聚合的summarise和summarise_each函数。这两个函数在处理单个或多个变量以及应用单个或多个函数时有所不同。summarise()语法简洁,适合简单操作,而summarise_each()在处理多个变量和函数时更具优势,且能通过setNames()设定输出变量名。通过实例展示了两种函数在不同场景下的应用。
441

被折叠的 条评论
为什么被折叠?



