在R语言中查找data.frame分组后薪资总和最高的组别
解决DataFrame分组薪资总和最高的问题
嘿,这个需求太常见啦,完全不用手动一个个算,R里有好几种简洁的方法能搞定,我给你分两种常用的方案,你看哪种顺手用哪种:
首先先构造一个和你场景匹配的示例数据框,方便你测试:
# 构造示例数据(模拟你的无规律分组+薪资数据) set.seed(123) # 固定随机种子,保证结果可重复 df <- data.frame( group = sample(c("A", "B", "C", "D", "E"), 100, replace = TRUE), salary = sample(3000:15000, 100, replace = TRUE) )
方案一:用Base R原生函数(无需额外安装包)
如果你不想装新包,用R自带的函数就能搞定:
- 先按分组计算薪资总和
# 按group分组,计算每组salary的总和 sum_salary <- aggregate(salary ~ group, data = df, FUN = sum)
- 直接定位到总和最高的分组
# 找到总和最大的行,提取分组名和对应总和 max_row <- sum_salary[which.max(sum_salary$salary), ] cat("薪资总和最高的组是:", max_row$group, ",对应的总和为:", max_row$salary, "\n")
which.max()会自动帮你找到最大值所在的行索引,哪怕你有几百个分组,这一步也能瞬间完成。
方案二:用dplyr包(更直观的管道式操作)
如果你平时经常做数据清洗和分析,dplyr的语法会更流畅,写起来像自然语言一样:
先确保你安装了dplyr(没装的话先跑install.packages("dplyr")),然后:
library(dplyr) # 管道式操作:分组→求和→取最大值行 max_salary_result <- df %>% group_by(group) %>% summarise(total_salary = sum(salary)) %>% slice_max(n = 1, order_by = total_salary) # 查看结果 print(max_salary_result)
group_by(group):按分组列聚合summarise(total_salary = sum(salary)):计算每组的薪资总和slice_max(n = 1, order_by = total_salary):取总和最高的那一行(如果有多个组总和相同,把n=1改成你需要的数量就能全部取出)
要是你想看看所有组的薪资总和从高到低排序,只需要在slice_max前面加一行arrange(desc(total_salary))就行,这样能一目了然看到所有分组的情况。
内容的提问来源于stack exchange,提问作者jester
相关产品推荐
相关产品推荐

