前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R中按照数字大小进行排序

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

作者头像
Listenlii-生物信息知识分享
发布2022-07-30 14:02:21
2K0
发布2022-07-30 14:02:21
举报

在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~~~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Listenlii 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. gtools包的mixedorder函数,一步到位直接对OTU名字中的数字排序:
  • 2. stringr包的str_order函数类似:
  • 3. OTU名字去掉OTU只保留数字再排序:
  • 4.OTU名字中的OTU和数字分开,单独对数字排序:
  • 5.根据OTU名字的字节数进行排序:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档