在使用dplyr的summarise()函数时,可以使用across()函数来避免重复。通过across()函数,我们可以对多个列应用相同的函数,而无需重复书写列名和函数。
示例:
library(dplyr)
# 待汇总数据
df <- data.frame(
  A = c(1, 2, 3),
  B = c(4, 5, 6),
  C = c(7, 8, 9)
)
# 重复汇总列 A 和 B
df %>% 
  summarise(total_A = sum(A),
            total_B = sum(B),
            avg_A = mean(A),
            avg_B = mean(B))
# 使用across()避免重复
df %>% 
  summarise(across(c(A, B), sum),
            across(c(A, B), mean))
我们还可以使用tidyverse的pivot_longer()函数来将需要进行汇总的列转换为长格式(long format),然后再使用summarise()函数进行汇总。
示例:
library(tidyverse)
# 待汇总数据
df <- data.frame(
  A = c(1, 2, 3),
  B = c(4, 5, 6),
  C = c(7, 8, 9)
)
# 将列转换为长格式
df_long <- df %>% 
  pivot_longer(cols = c(A, B), names_to = "var", values_to = "val")
# 汇总
df_long %>% 
  group_by(var) %>% 
  summarise(total = sum(val),
            avg = mean(val))