You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言实现按PC_achieved、Goal排序并对并列值赋予相同排名

解决方法

你只需要修改mutate里的排名计算逻辑,去掉多余的row_number(),直接基于PC_achieved和Goal的组合来生成并列排名。因为你已经按规则排好序了,只需要让相同组合值的行获得相同排名即可:

library(dplyr)

df <- df %>%
  arrange(desc(PC_achieved), desc(Goal)) %>%
  mutate(
    # 通过数值组合确保PC_achieved和Goal都相同的行被归为一组
    Rank = min_rank(desc(PC_achieved * 1000 + Goal))
  )

或者用更清晰的across语法,不需要手动构造数值组合:

df <- df %>%
  arrange(desc(PC_achieved), desc(Goal)) %>%
  mutate(
    Rank = min_rank(across(c(PC_achieved, Goal), ~ desc(.x)))
  )

原代码问题出在哪

你之前写的min_rank(row_number())完全是画蛇添足:row_number()会给每一行分配1到6的唯一序号,哪怕两行的PC_achieved和Goal完全一致,序号也不一样,所以min_rank处理后还是会生成唯一排名,这就是ID3和4得到5、6不同排名的原因。

验证结果

运行修改后的代码,最终的数据集会是这样:

IDPC_achievedGoalRank
21005001
1905002
6902003
5506004
3505005
4505005

完全符合你的需求:ID3和4拥有相同的排名5。

内容的提问来源于stack exchange,提问作者BlinkNFG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 04:42:06