前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >染色体坐标排序的两个方法

染色体坐标排序的两个方法

作者头像
生信技能树
发布2021-12-16 16:33:57
4700
发布2021-12-16 16:33:57
举报
文章被收录于专栏:生信技能树生信技能树

绘图的时候经常会遇到这个问题,有些NGS软件也会遇到。使用下面的代码模拟数据

代码语言:javascript
复制
pos_df=do.call(rbind,lapply(1:10, function(i){
  data.frame(gene=paste0('gene',i,LETTERS),
             chr=sample(paste0('chr',1:22),26,replace = T),
             start= sample(1:1000,26))
}))
pos_df=pos_df[with(pos_df,order(chr,start)),]
pos_df$chr=as.factor(pos_df$chr)
plot(pos_df$chr,pos_df$start,las=2)

首先我们的排序并没有按照染色体顺序,而是

代码语言:javascript
复制
> levels((pos_df$chr))
 [1] "chr1"  "chr10" "chr11" "chr12" "chr13" "chr14" "chr15" "chr16"
 [9] "chr17" "chr18" "chr19" "chr2"  "chr20" "chr21" "chr22" "chr3" 
[17] "chr4"  "chr5"  "chr6"  "chr7"  "chr8"  "chr9" 
> 

这种情况下sort这个向量其实是没有意义的, 有两个方案可以解决它!

首先是设置因子的水平即可,代码如下:

代码语言:javascript
复制
pos_df$chr=factor(pos_df$chr,paste0('chr',1:22),ordered = T)
pos_df=pos_df[with(pos_df,order(chr,start)),]
plot(pos_df$chr,pos_df$start,las=2)

第二个方案是可以通过在数字前面补0来

代码语言:javascript
复制
  pos_df$chr =  paste('chr',
              sprintf('%02d',as.numeric(gsub('chr','',pos_df$chr))) ,
                      sep = '') 
  pos_df$chr =  as.factor((pos_df$chr))

修改后再次查看其因子的水平 如下:

代码语言:javascript
复制
> levels((pos_df$chr))
 [1] "chr01" "chr02" "chr03" "chr04" "chr05" "chr06" "chr07" "chr08" "chr09"
[10] "chr10" "chr11" "chr12" "chr13" "chr14" "chr15" "chr16" "chr17" "chr18"
[19] "chr19" "chr20" "chr21" "chr22"

如果有X,Y染色体,可以转换为数值,比如 第24,25,26号染色体分别是X,Y,MT染色体。

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

本文分享自 生信技能树 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档