【问题标题】:Reordering factor (ordinal) variable in ascending order以升序重新排序因子(序数)变量
【发布时间】:2018-11-28 19:34:31
【问题描述】:

假设我的数据框中有一个变量,如下所示:

x <- rep(seq(10, 50, by = 10), each = 20) %>% factor() %>% forcats::fct_shuffle()

现在,我想按升序重新排列关卡。从理论上讲,我可以再次使用factor 并手动定义级别:

factor(x, levels = c(10, 20, 30, 40, 50))

但从长远来看,它似乎很麻烦,可能会有更多的关卡。那么如何按升序重新排列关卡呢?

【问题讨论】:

    标签: r forcats


    【解决方案1】:

    也许:

    factor(x, levels =  sort(levels(x)))
    
    # [1] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
    # [41] 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40
    # [81] 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
    # Levels: 10 20 30 40 50
    

    forcats:

    forcats::fct_inorder(x)
    

    数据:

    x <- rep(seq(10, 50, by = 10), each = 20) %>% factor() %>% forcats::fct_shuffle()
    

    【讨论】:

    • 但是,有没有来自 forcats 的功能可以做到这一点? df %&gt;% mutate(x = factor(x, levels = sort(levels(x)))) 导致 NAs
    • 是的,请参阅我的更新。这里是来自forcatsforcats.tidyverse.org/reference/index.html的有用函数列表
    • 仅供参考,您使用 mutate 的代码对我来说可以正常工作,所以也许尝试清理您的工作区然后重试。
    • 刚刚注意到 fct_inorder 并没有完全按照我的意图去做,因为它根据出现的顺序对级别进行排序(我得到的示例输出:Levels: 10 &lt; 20 &lt; 30 &lt; 40 &lt; 50 &lt; 5 &lt; 60 &lt; 70 &lt; 100),而我需要根据级别对级别进行排序它们的数值(期望:Levels: 5 &lt; 10 &lt; 20 &lt; 30 &lt; 40 &lt; 50 &lt; 60 &lt; 70 &lt; 100)。
    • 那么你可能需要fct_relevel(x,sort(levels(x)) ) 之类的东西,但我看不出与基本 R 解决方案的区别..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多