Использование масштабирования на основе категорий в R - PullRequest
0 голосов
/ 30 октября 2018

У меня есть фрейм данных, который содержит уровни и оценки. Я хочу перемасштабировать оценки на основе уровня с уровнем 5 из 100-91, уровнем 4 из 90-81, уровнем 3 из 80-71 и т. Д. Образец данных выглядит следующим образом ...

Tier Score  
1 95  
2 85  
3 90  
3 87  
1 90  
4 88  
5 90  
2 90  
5 75  
3 80  
4 72  
1 86  
5 70  

Что у меня до сих пор есть

library(scales)
df$scale = ifelse(df$tier == "5", rescale(df[df$tier == "5",]$score, to = c(91, 100)), df$scale)

, а на выходе получается NA

1 Ответ

0 голосов
/ 30 октября 2018

Сначала создайте список, содержащий ограничения для rescale. Первый элемент списка предназначен для Tier 1, второй элемент списка предназначен для Tier 2 и т. Д.

limits <- list(c(60, 51), c(61, 70), c(71, 80), c(81, 90), c(91, 100))

Вы можете использовать этот список в следующем dplyr подходе:

library(dplyr)
df %>%
   group_by(Tier) %>%
   mutate(scale = rescale(Score, to = limits[[first(Tier)]]))

Результат:

# A tibble: 13 x 3
# Groups:   Tier [5]
    Tier Score scale
   <int> <int> <dbl>
 1     1    95  51  
 2     2    85  61  
 3     3    90  80  
 4     3    87  77.3
 5     1    90  56  
 6     4    88  90  
 7     5    90 100  
 8     2    90  70  
 9     5    75  93.2
10     3    80  71  
11     4    72  81  
12     1    86  60  
13     5    70  91  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...