如何按ID分组对tibble不同列应用不同聚合函数?
按ID分组并对不同列应用不同聚合函数的实现
这个需求完全可以实现,以下是基于dplyr包(适配tibble数据结构的tidyverse工具)的两种实用实现方式:
方法1:逐列指定聚合函数
library(dplyr) # 生成原始数据 ID<-c('A','A','A','B','C','D','D','E','E','E') branch<-c('a','b','c','a','a','a','b','a','b','c') w <-sample (1:100, 10) x <-sample (1:100, 10) y <-sample (1:100, 10) z <-sample (1:100, 10) tib<-tibble(ID,branch,w,x,y,z) # 执行分组聚合 aggregated_result <- tib %>% group_by(ID) %>% summarize( w_sum = sum(w), x_mean = mean(x), y_mean = mean(y), z_sum = sum(z), .groups = "drop" # 聚合后取消分组状态,返回普通tibble ) # 查看最终结果 aggregated_result
方法2:用across()批量处理同规则列
针对x、y这类需要应用相同聚合函数的列,可通过across()简化代码:
aggregated_result <- tib %>% group_by(ID) %>% summarize( w = sum(w), across(c(x, y), mean), # 对x、y列统一应用均值计算 z = sum(z), .groups = "drop" )
两种方法最终都会输出每个ID对应一行的聚合结果,完全匹配你要求的规则:w列分组求和、x和y列分组求均值、z列分组求和。
内容的提问来源于stack exchange,提问作者Gilrob
相关产品推荐
相关产品推荐

