根据R

时间:2018-10-30 18:15:26

标签: r

我有一个包含等级和分数的数据框。我想根据从100-91的第5层,从90-81的第4层,从80-71的第3层等级别重新调整分数。数据示例如下...

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 :(得分:1)

首先,创建一个包含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