如何用forcats::fct_reorder仅按私立学校中位数重排郡县因子
解决方法
你只需对forcats::fct_reorder()的排序参数做掩码处理,仅保留私立学校数值参与中位数计算即可,修改后的完整代码如下:
# make df set.seed(1) df <- data.frame( county = rep(c("Bexar","Travis","Tarrant","Aransas"), each=20), type = rep(c("public","private"), each=10) ) %>% mutate(value = case_when(type == "public" ~ runif(80,0,1), type == "private" ~ runif(80, 0, 10))) # 仅按私立学校中位数重排county因子 df %>% mutate(county = forcats::fct_reorder( .f = county, .x = ifelse(type == "private", value, NA), .fun = median, na.rm = TRUE )) %>% # plot ggplot(aes(x=county, y = value, color = type)) + geom_point(position = position_dodge(width=.75)) + geom_boxplot(alpha=.5)
实现逻辑
- 用
ifelse(type == "private", value, NA)将公立学校的数值替换为缺失值 - 传入
na.rm = TRUE参数后,median函数计算时会自动忽略缺失的公立数值,仅用每个郡县私立学校的中位数对因子排序,最终得到你需要的升序顺序:Aransas、Travis、Tarrant、Bexar。
内容的提问来源于stack exchange,提问作者Jake L
相关产品推荐
相关产品推荐

