R中的reorder()函数用于将factor的level快速排序
用法:reorder(x, X, decreasing = FALSE)
- x为原始的vector
- X为期望因子排序的量,长度与x相同。若为character,按字母顺序排,若为数字,按从小到大的顺序排
- decreasing参数与order和sort的decreasing参数相同,默认为F,从小到大
- 注:若给第二个参数前添加负号,即
-X,也可以达到按相反方向排序的效果
例:
> gene <- c("PSMD1", "GRPEL2", "UCK2", "SEPHS1","UTP11", "KPNA2", "EIF5B", "YARS1")
> coef <- c(0.0058, 0.0117, 0.0135, 0.0065,0.0515, 0.0007, 0.0008, 0.008)
> reorder(gene, coef)
[1] PSMD1 GRPEL2 UCK2 SEPHS1 UTP11 KPNA2 EIF5B YARS1
attr(,"scores")
EIF5B GRPEL2 KPNA2 PSMD1 SEPHS1 UCK2 UTP11 YARS1
0.0008 0.0117 0.0007 0.0058 0.0065 0.0135 0.0515 0.0080
Levels: KPNA2 EIF5B PSMD1 SEPHS1 YARS1 GRPEL2 UCK2 UTP11
可以看到:
- reorder的返回值与原向量相同
- reorder的返回值的因子水平会按照第二个参数进行排序
- reorder在使用ggplot2进行画图时对横/纵坐标制定顺序时非常有用
例:
ggplot(mapping = aes(x = gene, y = coef)) +
geom_bar(stat = "identity")

reorder前
ggplot(mapping = aes(x = reorder(gene, coef), y = coef)) +
geom_bar(stat = "identity")

reorder后