## Error in `library()`:
## ! there is no package called 'tidyverse'
基于R, fct_relevel来自forcats包。
fct_relevel的例子
为了方便理解函数,一般R默认首个出现的factor是对照组。
## Error in `fct_relevel()`:
## ! could not find function "fct_relevel"
## Error in `fct_relevel()`:
## ! could not find function "fct_relevel"
## Error in `fct_relevel()`:
## ! could not find function "fct_relevel"
设计方案
目标是把一个数据表中,符合要求的变量批量重新设置对照组,条件是各自占比最大。
假设数据,
## Error in `library()`:
## ! there is no package called 'tidyverse'
## Error in `data_frame()`:
## ! could not find function "data_frame"
## Error in `b %>% mutate(c = case_when(a < 11 ~ "老大", a < 21 ~ "老二", TRUE ~ "老幺")) %>%
## mutate(d = c)`:
## ! could not find function "%>%"
## Error in `b %>% .$c %>% table()`:
## ! could not find function "%>%"
其中老幺是比例最大的吧。
## Error in `b %>% head()`:
## ! could not find function "%>%"
这里c和d虽然一样,但是主要是等会验证批量操作是否可以。
## Error in `b %>% group_by(c) %>% summarise(n = n())`:
## ! could not find function "%>%"
## Error in `b1 %>% arrange(desc(n)) %>% .[1, 1] %>% .$c`:
## ! could not find function "%>%"
## Error in `b %>% mutate(c = fct_relevel(c, reference_group))`:
## ! could not find function "%>%"
## Error in `fct_relevel()`:
## ! could not find function "fct_relevel"
## Error in `fct_relevel()`:
## ! could not find function "fct_relevel"
这里会发现老幺被调整到第一个level了。
设计函数
relevel_me <- function(b, c) {
b1 <- b %>%
group_by(c) %>%
summarise(n = n())
reference_group <- b1 %>%
arrange(desc(n)) %>%
.[1,1] %>% .$c
b3 <- b %>%
mutate(c = fct_relevel(c, reference_group))
b3$c
}测试函数,使用d变量,发现的确挑战成功了。
## Error in `fct_relevel()`:
## ! could not find function "fct_relevel"
## Error in `b %>% group_by(c) %>% summarise(n = n())`:
## ! could not find function "%>%"
批量完成
使用mutate_at中的vars来完成批量就好了。
## Error in `b %>% mutate_at(vars(c, d), function(x) {
## x = relevel_me(b, x)
## })`:
## ! could not find function "%>%"
## Error in `fct_relevel()`:
## ! could not find function "fct_relevel"
## Error in `fct_relevel()`:
## ! could not find function "fct_relevel"
结果中,显然c和d都调整了,老幺置前。