我正在努力按 Col1 对行进行排名,然后如果按 Col2 存在平局,并且仍然存在平局则返回相同的排名

问题描述 投票:0回答:1

我有一个数据集,显示员工针对目标的表现。我想在数据集中添加一个排名列,显示谁表现最好。

我想使用的逻辑是

  • 首先按 PC_achieved 排序(员工迄今为止已实现目标的百分比)
  • 如果存在平局,则按目标,以便实现相同百分比但目标更大的员工排名靠前

这是创建数据集示例的 R 代码:

ID <- c(1,2,3,4,5,6)
PC_achieved <- c(90,100,50,50,50,90)
Goal <- c(500,500,500,500,600,200)

df <- data.frame(ID,PC_achieved,Goal)

我目前使用以下代码,但即使工作人员在两个排名列中具有相同的值,它也会给出唯一的排名。

df <- df %>%
  arrange(desc(PC_achieved), desc(Goal)) %>%
  mutate(
    Rank = min_rank(row_number())
  )

我希望 ID 3 和 ID 4 获得相同的排名 5,而不是当他们都实现了相同目标的 50% 时,一个排名 5,另一个排名 6。

r ranking rank
1个回答
0
投票
df |>
  arrange(-PC_achieved, -Goal) |>
  mutate(new_rank = PC_achieved < lag(PC_achieved,1,Inf) | Goal < lag(Goal,1,0),
         rank = cumsum(new_rank))

  ID PC_achieved Goal new_rank rank
1  2         100  500     TRUE    1
2  1          90  500     TRUE    2
3  6          90  200     TRUE    3
4  5          50  600     TRUE    4
5  3          50  500     TRUE    5
6  4          50  500    FALSE    5
© www.soinside.com 2019 - 2024. All rights reserved.