R中的函数重新排序和排序值

这个问题在这里已经有了答案:

  • 如何按多个列排序数据框? 16个答案
  • ggplot2条形图中的命令栏9个答案

  • 从文档

    重新排序是一个通用功能。 “default”方法将其第一个参数作为分类变量处理,并根据第二个变量(通常是数字)的值对其级别进行重新排序。

    注意重新排序级别,而不是列

    比较:

    levels(stest$group)
    [1] "James" "Jane"  "John" 
    

    >  reorder(stest$group, c(1,2,3))
    [1] John  Jane  James
    attr(,"scores")
    James  Jane  John 
        3     2     1 
    Levels: John Jane James
    

    编辑1

    从你评论:

    “@Chargaff是的,它返回正确的顺序,但是当我试图在ggplot中使用这个数据框时,ggplot仍然以前面的顺序绘制它。”

    看起来你确实想要为ggplot重新排序。 我建议你这样做:

    stest$group <- reorder(stest$group, stest$mean)
    

    编辑2

    回复上一行注释,上面的代码行“没有效果”。 显然它确实:

    > stest$group
    [1] John  Jane  James
    Levels: James Jane John         # <-------------------------------
    > stest$group <- reorder(stest$group, stest$mean)              # |
    > stest$group                                                  # |
    [1] John  Jane  James                                          # |
    attr(,"scores")                                                # | DIFFERENT :)
    James  Jane  John                                              # |
        1     5     3                                              # | 
    Levels: James John Jane        # <--------------------------------
    

    我认为你想要的order函数返回一个索引,而不是reorder ,这是用来改变因子水平的顺序。 这将做到这一点。

    > stest[order(stest$mean),]
    

    我发现我的错误感谢user1317221_G和其他人。

    正确的代码,将命令我的数据集是:

    stest$group <- reorder(stest$group, stest$mean, FUN=identity)
    

    stest$group <- reorder(stest$group, stest$mean)
    

    没有订购我的数据帧。 不知道为什么FUN = mean不起作用,但我必须指定identity

    可能的原因是这样的:重新排序因子给出不同的结果,这取决于加载哪些包

    UPDATE

    拥有第一行代码是不够的。 reorder不会强制第二个因子的参数,因此最终排序可能不完整(例如,按照降序排列的较低值之下的较高值)。

    因此,确保您有正确的顺序:

    stest$group <- reorder(stest$group, as.factor(stest$mean), FUN=identity)
    
    链接地址: http://www.djcxy.com/p/70841.html

    上一篇: Function reorder in R and ordering values

    下一篇: Sort data frame by two columns (with condition)