我有一个数据集,显示员工针对目标的表现。我想在数据集中添加一个排名列,显示谁表现最好。
我想使用的逻辑是
这是创建数据集示例的 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。
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