R中按照数字大小进行排序

2022-07-30 14:02:21 浏览数 (2)

在R中有时会需要通过数字大小对某些数据进行排序。

不过R默认是按照字符大小顺序进行排序,如常见的OTU名称:

OTU1,OTU2,OTU3,OTU10 ,OTU20...

会被默认排序为:

OTU1,OTU10,OTU2,OTU20,OTU3...

这在一些数据处理和画图过程非常不方便。

如果要按照数字排序为OTU1,OTU2,OTU10这种,可以有很多方法,本文举几种简单的例子:


先读进一个OTU表~

代码语言:javascript复制
otu = read.table(file = "otu.txt",sep="t",row.names = 1,header=T,check.names=F)

# 行名为OTU的名字
name = rownames(OTU)

1. gtools包的mixedorder函数,一步到位直接对OTU名字中的数字排序:

代码语言:javascript复制
library(gtools)
a = mixedorder(name)
otu2 = otu[a,]

2. stringr包的str_order函数类似:

代码语言:javascript复制
library(stringr)
b = str_order(name, numeric = TRUE)
otu2 = otu[b,]

3. OTU名字去掉OTU只保留数字再排序:

代码语言:javascript复制
c = order(as.numeric(gsub("OTU","",name)))
otu2 = otu[c,]

4.OTU名字中的OTU和数字分开,单独对数字排序:

代码语言:javascript复制
d = order(as.numeric(sapply(strsplit(name,"Zotu"),"[",2)))
otu2 = otu[d,]

5.根据OTU名字的字节数进行排序:

代码语言:javascript复制
e = name[order(nchar(name),name)]
otu2 = otu[e,]

还有其他多种方法,不再赘述,Over~~~

0 人点赞