R语言排序函数

Python015

R语言排序函数,第1张

sort()是对向量进行从小到大的排序

rank()返回的是对向量中每个数值对应的秩

order()返回的值表示位置,依次对应的是向量的最小值、次小值、第三小值......最大值

rank() sort() order() 和 reorder()

data<=c(2,3,6,1)

reorder()函数在ggplot2中见过:

x = reorder(Var1, -Freq) Var1是分类变量,Freq是数值型变量

help(recorder) 的结果:

Reorder Levels of a Factor

Description

reorder is a generic function. The "default" method treats its first argument as a categorical variable, and reorders its levels based on the values of a second variable, usually numeric.

Usage

reorder(x, ...)

Default S3 method:

reorder(x, X, FUN = mean, ...,

order = is.ordered(x))

喜大普奔,终于解决了reorder()降序排序的问题;

举例说明一下:

首先我有两列数据:第一列是样品名,第二列是对应数值。

先画个简单的barplot:

如下图:

我想将x轴排序,可以提前将数据排好序之后再画图,但是这里用reorder()函数直接根据y值的大小排序:

如图:

但是reorder如何从大到小排呢?

研究了好久,比如加了reverse=F/T,加了decrease=F/T,等等,都不行,终于发现原来只要加个“-”就可以:

图:

图不怎么好看,只是为了演示reorder从大到小排序。

今天在用R绘制多组boxplot时碰到一个问题:如何自定义boxplot各组的输出次序?

问题描述:

ups<-read.delim("e:\\test.txt")

ups.melt<-melt(ups,id.var="exp")

p<-ggplot(data=ups.melt, aes(x=exp,y=value,fill=variable))+geom_boxplot(alpha=0.8)

p绘制的结果如下:

ups的表头如下:

输入str(ups)查看其数据类型:

可以发现ups$exp的因子水平是按照默认的ASCII码排序的,boxplot输出的次序是:UPS2mouse, UPS2only, UPS2yeast

但是我想要的次序是UPS2only, UPS2yeast, UPS2mouse,因此需要重新定义exp的因子水平

这里只需调整melt之后的因子水平即可:

ups.melt$exp=factor(ups.melt$exp, levels=c("UPS2only","UPS2yeast","UPS2mouse"))#修改exp的因子水平顺序,从而确定X轴输出的顺序

调整后再运行ggplot2的绘图命令:

p<-ggplot(data=ups.melt, aes(x=exp,y=value,fill=variable))+geom_boxplot(alpha=0.8)