在使用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))