Возвращает рейтинг показателей в r

#r

#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),

Пример выходных данных выглядит следующим образом:

введите описание изображения здесь

Ответ №1:

 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
 

Этот подход будет работать до тех пор, пока у вас есть три MetricScores. Если вам нужно больше, вам нужно настроить n_metrics.

Сначала мы используем tidyr::pivot_longer, чтобы сделать ваш фрейм данных длиннее. Затем мы группируем по Cat и соответствующим образом упорядочиваем значения (по умолчанию увеличивается). Затем мы добавляем показатель производительности (поскольку метрики уже отсортированы).