美文网首页R for statistics人生几何?
59.关于调整因子的属性levels的order(一)

59.关于调整因子的属性levels的order(一)

作者: 心惊梦醒 | 来源:发表于2021-09-16 13:09 被阅读0次

    【上一篇:58.关于学习因子的一个有用的数据集gss_cat】
    【下一篇:60.关于调整因子的属性levels的order(二)】

        接下来将介绍forcats包中对因子的levels属性的order进行更改的几个函数:fct_reorder()、fct_reorder2()、fct_relevel()、fct_infreq()、fct_rev()。
        PS:这一类函数中fct可以理解为factor中的字母。


        在绘图中,调整factor的levels顺序是很实用的。
        首先是fct_reorder()和fct_reorder2(),两者的Usage如下:

    fct_reorder(.f, .x, .fun = median, ..., .desc = FALSE)
    
    fct_reorder2(.f, .x, .y, .fun = last2, ..., .desc = TRUE)
    

        这两个函数的功能是通过对另一个变量排序来重排levels的顺序
        fct_reorder()适用于一维展示(x轴方向或者y轴方向)的情况,此种情况下,因子的顺序映射的是位置,例如柱状图中横坐标上每个柱子的排序,又如下例中研究gss_cat数据集中每天看电视的时间与relig的关系:

    library(ggpubr)
    p1<- gss_cat %>% group_by(relig) %>%
        summarise(
            age = mean(age, na.rm = TRUE),
            tvhours = mean(tvhours, na.rm = TRUE),
            n = n()
        ) %>% ggplot(aes(tvhours, relig)) + geom_point()
    
    p2<-gss_cat %>% group_by(relig) %>%
        summarise(
            age = mean(age, na.rm = TRUE),
            tvhours = mean(tvhours, na.rm = TRUE),
            n = n()
        ) %>% ggplot(aes(tvhours, fct_reorder(relig, tvhours))) + geom_point()
    ggarrange(p1,p2)
    
    根据x的值对y轴进行排序

        上图中,左图(p1)显得很乱,右图(p2)中可以很清楚地看出哪个reigion平均看电视的时间最长或最短。

    fct_reorder(.f, .x, .fun = median, ..., .desc = FALSE)
    .f :要排序的因子向量
    .x :按照一个数值向量对因子进行排序,其实是对.f进行排序以使得.x以升序(默认)排列,
      设置.desc=TRUE使.x按降序排列
    .fun:如果一个levels对应多个.x中的值,则按照median值对levels进行排序
    

        fct_reorder2()适用于二维展示(x轴和y轴两个方向上综合调整),此时,因子的顺序映射的不再是位置了,而是集合对象和legend的对应关系。下面我们将举例说明(婚姻状况与年龄的关系):

    
    by_age <- gss_cat %>%
      filter(!is.na(age)) %>%
      count(age, marital) %>%
      group_by(age) %>%
      mutate(prop = n / sum(n))
    
    p3<-ggplot(by_age, aes(age, prop, colour = marital)) +
      geom_line(na.rm = TRUE)
    
    p4<-ggplot(by_age, aes(age, prop, colour = fct_reorder2(marital, age, prop))) +
      geom_line() +
      labs(colour = "marital")
    
    ggarrange(p3,p4)
    
    线与图例的关系

        图形的形状并没有变化,线的颜色(图例)与分类变量的对应关系发生变化,上右图图例中从上到下依次和最大的x对应的y相照应。

    fct_reorder2(.f, .x, .y, .fun = last2, ..., .desc = TRUE)
    .f : 要排序的因子
    .x和.y:根据最大的.x对应的.y(默认升序)对.f进行排序
    .fun:如果一个levels对应多个.x和.y,则用.fun函数决定用哪个y值排序
    last2()查找按x排序后y的最后一个值;first2()查找第一个值
    

    【上一篇:58.关于学习因子的一个有用的数据集gss_cat】
    【下一篇:60.关于调整因子的属性levels的order(二)】

    相关文章

      网友评论

        本文标题:59.关于调整因子的属性levels的order(一)

        本文链接:https://www.haomeiwen.com/subject/lvkowltx.html