从ensembl的ID到其转录本坐标

假设通过了某种分析(差异分析,peaks富集等等)得到了指定的基因集,但是是以ensembl数据库ID命名的,比如:

[1] "ENSMUSG00000000031" "ENSMUSG00000000792" "ENSMUSG00000001027" "ENSMUSG00000001508" "ENSMUSG00000002007"
[6] "ENSMUSG00000002985"

想得到它们这些ID对应的转录本的起始终止坐标。

第一步:把ensembl的ID对应到entrez ID

需要指定ensembl数据库ID来源的物种的org包

library(clusterProfiler)
library(org.Mm.eg.db)
geneList <- sample(mappedRkeys(org.Mm.egENSEMBL),100)
g=bitr( geneList , fromType = "ENSEMBL",
         toType = c("ENTREZID", "SYMBOL"),
         OrgDb = org.Mm.eg.db)[,2]

第二步:根据entrez ID来获取转录本信息

这个需要借助 TXDB 系列包

library("TxDb.Mmusculus.UCSC.mm10.knownGene")
txdb=TxDb.Mmusculus.UCSC.mm10.knownGene
columns(txdb)
select(txdb, keys = g, columns=c( "TXCHROM","TXSTART","TXEND","TXNAME", "TXSTRAND"), keytype="GENEID")

当然了,这个时候的转录本ID是UCSC数据库的,不过一般来说,坐标就够了,转录本ID其实是用不上的。

第4步:包装成函数

get_bed <- function(file){
 library(clusterProfiler)
 library(org.Mm.eg.db)
 library("TxDb.Mmusculus.UCSC.mm10.knownGene")
 txdb=TxDb.Mmusculus.UCSC.mm10.knownGene
 columns(txdb)
 g=bitr( geneList , fromType = "ENSEMBL",
              toType = c("ENTREZID", "SYMBOL"),
              OrgDb = org.Mm.eg.db)[,2]

bed=select(txdb, keys = g, columns=cl, keytype="GENEID")[,c(3,5,6,1,2,4)]
 write.table(bed,file = paste0(file,'.bed'),quote = F,col.names = F,row.names = F,sep = '\t')
}

画外音:坐标需要排序

当我把制作好的bed文件拿去做下游分析的时候,发现,报错,原因是bed文件并没有排序,O(∩_∩)O哈哈~

 keepChr=paste0('chr',c(1:22,"X","Y","M"))
 bed=bed[bed$TXCHROM %in% keepChr,]
 bed$TXCHROM=as.factor(bed$TXCHROM)
 levels(bed$TXCHROM)=keepChr
 sort_bed=bed[order(bed$TXCHROM,bed$TXSTART),]

所以又加上了几行代码,搞定!

(0)

相关推荐