R中的函数重新排序和排序值
这个问题在这里已经有了答案:
从文档
重新排序是一个通用功能。 “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