首页 > 解决方案 > 在 r 中返回指标排名

问题描述

数据子集如下:

Cat <- c('A','B','C')
Metrics1 <- c(1,4,3)
Metrics2 <- c(1.5,0.3,3.4)
Metrics3 <- c(0.1,40,3.2)
df <- data.frame(Cat,Metrics1,Metrics2,Metrics3)

我想以这样一种方式创建另一个数据框,即对于每个类别,我都会获得指标的排名(指标的最小值使其排名为 1),

示例输出如下:

在此处输入图像描述

标签: r

解决方案


library(dplyr)
library(tidyr)

n_metrics <- 3

df %>% 
  pivot_longer(cols = c(Metrics1, Metrics2, Metrics3), names_to = "Metrics") %>%
  group_by(Cat) %>% arrange(Cat,value) %>%
  mutate(Performance = paste0("Best-",1:n_metrics)) %>%
  dplyr::select(Cat, Performance, Metrics)

# A tibble: 9 x 3
# Groups:   Cat [3]
  Cat   Performance Metrics 
  <chr> <chr>       <chr>   
1 A     Best-1      Metrics3
2 A     Best-2      Metrics1
3 A     Best-3      Metrics2
4 B     Best-1      Metrics2
5 B     Best-2      Metrics1
6 B     Best-3      Metrics3
7 C     Best-1      Metrics1
8 C     Best-2      Metrics3
9 C     Best-3      Metrics2

只要您拥有三个 MetricScore,这种方法就可以使用。如果您需要更多,则需要调整n_metrics

首先,我们使用tidyr::pivot_longer使您的数据帧更长。然后我们按Cat分组并相应地排列值(默认为递增)。然后我们添加性能度量(因为指标已经排序)。


推荐阅读