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

Ant*_*nko 5 sorting r

我正在尝试以下功能:

stest <- data.frame(group=c("John", "Jane", "James"), mean=c(3, 5, 1))
transform(stest, group = reorder(group, mean))
Run Code Online (Sandbox Code Playgroud)

并期望输出按 排序mean。相反,我得到:

  group mean
1  John    3
2  Jane    5
3 James    1
Run Code Online (Sandbox Code Playgroud)

也就是说,与原始数据帧中的顺序相同。

我错过了什么吗?如何通过数据框的数值变量之一正确排序数据框?

周围的建议是关于使用的reorder,但我无法使其按预期工作。任何加载的包都会干扰吗?

use*_*1_G 5

文档中

重新排序是一个通用函数。“默认”方法将其第一个参数视为分类变量,并根据第二个变量(通常是数字)的值重新排序其级别。

注意:重新排序级别,而不是因子变量的值(group在您的情况下)。

比较:

levels(stest$group)
[1] "James" "Jane"  "John" 
Run Code Online (Sandbox Code Playgroud)

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

编辑1

从你的评论来看:

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

看来你确实想重新排序 ggplot 的级别。我建议你这样做:

stest$group <- reorder(stest$group, stest$mean)
Run Code Online (Sandbox Code Playgroud)

编辑2

RE 您最后的评论是上面的代码行“无效”。显然它确实:

> 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        # <--------------------------------
Run Code Online (Sandbox Code Playgroud)

  • 看看我的例子。你原来的级别的顺序是“James”“Jane”“John”`我将它们更改为“1,2,3”,因此现在级别(*不是列中的数据*)是“John Jane James”。也许你应该阅读“?levels” (2认同)