我有一个包含等级和分数的数据框。我想根据从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
答案 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