我有一个包含层次和分数的数据。我想取消基于等级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
发布于 2018-10-30 18:46:36
首先,创建一个包含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 https://stackoverflow.com/questions/53070476
复制相似问题