#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 и соответствующим образом упорядочиваем значения (по умолчанию увеличивается). Затем мы добавляем показатель производительности (поскольку метрики уже отсортированы).