【发布时间】:2018-09-09 09:02:09
【问题描述】:
在进行数据分析时,有时我需要将值重新编码为因子以便进行组分析。我想保持因子的顺序与case_when 中指定的转换顺序相同。在这种情况下,订单应该是"Excellent" "Good" "Fail"。我怎样才能做到这一点而不像levels=c('Excellent', 'Good', 'Fail') 那样繁琐地再次提及它?
非常感谢。
library(dplyr, warn.conflicts = FALSE)
set.seed(1234)
score <- runif(100, min = 0, max = 100)
Performance <- function(x) {
case_when(
is.na(x) ~ NA_character_,
x > 80 ~ 'Excellent',
x > 50 ~ 'Good',
TRUE ~ 'Fail'
) %>% factor(levels=c('Excellent', 'Good', 'Fail'))
}
performance <- Performance(score)
levels(performance)
#> [1] "Excellent" "Good" "Fail"
table(performance)
#> performance
#> Excellent Good Fail
#> 15 30 55
【问题讨论】:
-
那是他不想做的事(而且已经在做)
-
这是一个不错的解决方案!
-
漂亮,谢谢!
-
要允许在 RHS 上使用表达式,请在倒数第二行插入
levels = sapply(levels, FUN = eval)。这样就可以执行result = fct_case_when(x < 5 ~ my_vec[3])而不会将“my_vec[3]”设为result。 -
请不要在问题中编辑解决方案公告。接受(即单击旁边的“勾号”)现有答案之一,如果有的话。如果现有答案尚未涵盖您的解决方案,您还可以创建自己的答案,甚至接受它。比较stackoverflow.com/help/self-answer
标签: r dplyr data-analysis tidyverse forcats