dplyr包的聚集函数summarise 和 summarise_each

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

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

`dplyr::summarise` 函数是 `dplyr` 中用于对数据进行汇总统计的重要函数,结合 `mean` 函数可以方便地计算指定变量的均值。以下以引用[1]中的代码为例进行解释: ```R cali_df <- pred_rf %>% arrange(.pred_pass) %>% mutate(pass = if_else(play_type == "pass", 1, 0), group = c(rep(1:249, each = 92), rep(250, 87))) %>% group_by(group) %>% summarise(mean_pred = mean(.pred_pass), mean_obs = mean(pass)) ``` ### 代码解释 1. **数据排序**:`arrange(.pred_pass)` 对 `pred_rf` 数据集按照 `.pred_pass` 变量进行升序排序。 2. **变量创建**:`mutate` 函数用于创建新的变量。`pass` 变量根据 `play_type` 是否为 `"pass"` 来赋值,是则为 1,否则为 0;`group` 变量将数据分为 250 组,前 249 组每组 92 个数据,最后一组 87 个数据。 3. **分组操作**:`group_by(group)` 将数据按照 `group` 变量进行分组。 4. **汇总统计**:`summarise` 函数对每个分组进行汇总统计。`mean_pred = mean(.pred_pass)` 计算每个分组中 `.pred_pass` 变量的均值;`mean_obs = mean(pass)` 计算每个分组中 `pass` 变量的均值。 ### 使用方法 如果要使用 `dplyr::summarise` 函数结合 `mean` 计算 `predicted_value` 的均值,可以按照以下步骤操作: ```R # 假设我们有一个数据框 df,含 predicted_value group 两列 df <- data.frame( predicted_value = rnorm(100), group = sample(1:5, 100, replace = TRUE) ) # 使用 dplyr library(dplyr) # 按照 group 分组并计算 predicted_value 的均值 result <- df %>% group_by(group) %>% summarise(mean_predicted_value = mean(predicted_value)) # 查看结果 print(result) ``` ### 常见问题 - **缺失值处理**:`mean` 函数默认会忽略缺失值(`NA`),如果数据中存在缺失值,可能会影响结果。可以使用 `na.rm = TRUE` 参数来明确指定忽略缺失值。例如:`summarise(mean_predicted_value = mean(predicted_value, na.rm = TRUE))`。 - **分组变量类型**:分组变量必须是离散型变量,如因子、字符型或整数型。如果使用连续型变量进行分组,可能会导致每个组只有一个数据点,失去分组汇总的意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值