R语言跨多主管列汇总Exp总和的apply族实现方法咨询
apply族实现主管管辖费用汇总
不需要对两列主管分别做分组、拼接、二次汇总的重复操作,apply族可以直接基于主管在两列的出现位置匹配对应费用值,实现更简洁。
实现代码
你构造的df中存在展示笔误(表格表头把Supv2写为Sup2),代码运行时直接用原构造的列名即可:
# 提取两列主管数据 supv_cols <- df[, c("Supv1", "Supv2")] # 获取所有去重的主管名单 all_sup <- unique(unlist(supv_cols)) # sapply遍历每个主管,累加对应关联行的Exp值 total_exp <- sapply(all_sup, function(target_sup) { sum(df$Exp[supv_cols == target_sup]) }) # 整理为标准data.frame格式 result_df <- data.frame( Sup = names(total_exp), total.exp = as.numeric(total_exp), row.names = NULL )
输出效果
运行代码后得到的结果和你预期完全匹配:
- d: 31
- k: 30
- j: 10
- an: 10
- a: 21
对比原实现的优化点
- 去掉了两次
group_by、两次summarise、rbind拼接、最后再二次汇总的重复流程,逻辑更直接 - 纯base R实现,无额外依赖,运行效率和tidyverse方案相当
- 自动兼容主管出现在任意层级列的场景,不需要单独处理列的归属逻辑
内容的提问来源于stack exchange,提问作者Chakravarthy G Kalyan
相关产品推荐
相关产品推荐

