R语言数据框:按Name分组求和Rank并排序的实现方法
解决方法:正确分组聚合+排序
你的代码里有几个小问题导致没得到想要的结果,我来帮你修正:
问题分析
- 分组变量错误:你写的
group_by(Var1),但你的数据框里并没有Var1列,应该是按name分组。 - 聚合函数误用:
mutate()会保留原数据的所有行,只是给每个分组添加新列;而你需要的是每个name只保留一行的汇总结果,应该用summarise()(或summarize(),两者等价)。 - 列名引用错误:你用了
Freq2,但你的数据里只有rank列是已经计算好的翻倍后的值,应该对rank求和。 - 缺少排序步骤:你需要对最终的
final_rank按降序排序,所以要加上arrange()函数。
正确代码
library(dplyr) # 先确认rank列已经正确计算(你原来的代码是对的) orientadores$rank <- orientadores$Freq * ifelse(orientadores$Var2=="B",2,1) # 分组求和+排序 orientadores_final <- orientadores %>% group_by(name) %>% summarise(final_rank = sum(rank)) %>% arrange(desc(final_rank)) %>% ungroup() # 可选,但分组后建议取消分组避免后续操作出错 # 查看结果 head(orientadores_final)
运行结果验证
执行后你会得到和预期完全一致的结果:
# A tibble: 4 × 2 name final_rank <chr> <dbl> 1 Author4 7 2 Author1 5 3 Author3 3 4 Author2 2
简单解释下关键步骤:
group_by(name):按作者名完成分组,确保后续计算都是基于每个作者的独立组summarise(final_rank = sum(rank)):对每个分组的rank值求和,生成仅包含作者名和最终排名的汇总行arrange(desc(final_rank)):按最终排名从高到低排序,满足你的结果顺序需求ungroup():取消分组状态,避免后续对这个数据框操作时受到分组限制(推荐添加)
内容的提问来源于stack exchange,提问作者Lucca Ramalho
相关产品推荐
相关产品推荐

