使用不匹配的gtf版本信息会导致近一半ID无法转化

太多人有这样的疑问,为什么自己进行ID转换的时候,成功率很低,今天就为你解惑。

当我们遇到了这样一个表达矩阵(其实就是从tcga数据库下载,通过ucsc的xena浏览器啦):

dim(exprSet)
exprSet=exprSet[apply(exprSet,1, function(x) sum(x>1) > 2),]
dim(exprSet)

> dim(exprSet) 
[1] 45821   122
> exprSet[1:4,1:4]

TCGA-A1-A0SP-01A TCGA-E2-A1LS-01A TCGA-BH-A0B9-01A TCGA-E2-A1LL-01A
ENSG00000000003.13             4283             6734             8676             2456
ENSG00000000005.5                 6                6               13               21
ENSG00000000419.11             2508             2255             6767             1713
ENSG00000000457.12              958             4363             3373              557

看到基因名字是 ENSG00000000003.13  这样的ID, 就需要转换:

常规的做法是:

library(stringr)
surGenes=str_split(rownames(exprSet),'[.]',simplify = T)[,1]
library(clusterProfiler)
library(org.Hs.eg.db)
df <- bitr(unique(surGenes), fromType = "ENSEMBL",
           toType = c( "ENTREZID" ,'GENENAME','SYMBOL'),
           OrgDb = org.Hs.eg.db)
head(df)

但使用不匹配的gencode的gtf版本信息会导致近一半ID无法转化 !

'select()' returned 1:many mapping between keys and columns
Warning message:
In bitr(unique(surGenes), fromType = "ENSEMBL", toType = c("ENTREZID",  :
  49.13% of input gene IDs are fail to map...
> head(df)

那我们就要想如何进行完美的基因信息匹配,首先需要去ucsc的xena浏览器里面下载到encode.v22.annotation.gene.probeMap 文件,这个是他们的表达量矩阵的基因的id的注释信息。

代码如下:

a=read.table('gencode.v22.annotation.gene.probeMap',header = T)
head(a)
ids=a[match(rownames(exprSet),a$id),1:2]
head(ids)
# 可以达到完美匹配
> head(ids)
                      id     gene
58775 ENSG00000000003.13   TSPAN6
58774  ENSG00000000005.5     TNMD
54795 ENSG00000000419.11     DPM1
3850  ENSG00000000457.12    SCYL3
3845  ENSG00000000460.15 C1orf112
910   ENSG00000000938.11      FGR

但这还远远不够我们惊奇的发现一个有一些基因的id是对应同一个基因的名字,如下所示:

tmp=table(ids$gene)
head(ids[ids$gene %in% names(tmp[tmp==2]),])
ids[ids$gene %in% head(names(tmp[tmp==2])),]

输出结果:

                      id     gene
29654 ENSG00000150076.21    CCDC7
55841 ENSG00000160200.16      CBS
20157  ENSG00000213204.7 C6orf165
29651 ENSG00000216937.10    CCDC7
7190   ENSG00000241962.8  C2orf15
30312  ENSG00000242338.5   BMS1P4
33473  ENSG00000248671.6  ALG1L9P
33474  ENSG00000254978.2  ALG1L9P
30309  ENSG00000271816.1   BMS1P4
20156  ENSG00000272514.4 C6orf165
7191   ENSG00000273045.4  C2orf15
55140  ENSG00000274276.3      CBS

对于这样的基因有多种处理方式, 我们这里选择删除表达量低的基因即可。

代码如下:

colnames(ids)=c('probe_id','symbol')  
ids=ids[ids$symbol != '',]
dat=exprSet
ids=ids[ids$probe_id %in%  rownames(dat),]
dat[1:4,1:4]   
dat=dat[ids$probe_id,]

ids$median=apply(dat,1,median) #ids新建median这一列,列名为median,同时对dat这个矩阵按行操作,取每一行的中位数,将结果给到median这一列的每一行
ids=ids[order(ids$symbol,ids$median,decreasing = T),]#对ids$symbol按照ids$median中位数从大到小排列的顺序排序,将对应的行赋值为一个新的ids
ids=ids[!duplicated(ids$symbol),]#将symbol这一列取取出重复项,'!'为否,即取出不重复的项,去除重复的gene ,保留每个基因最大表达量结果s
dat=dat[ids$probe_id,] #新的ids取出probe_id这一列,将dat按照取出的这一列中的每一行组成一个新的dat
rownames(dat)=ids$symbol#把ids的symbol这一列中的每一行给dat作为dat的行名
dat[1:4,1:4]  #保留每个基因ID第一次出现的信息

最后就得到了一个纯粹的表达量矩阵,如下:

> dat[1:4,1:4]   
       TCGA-A1-A0SP-01A TCGA-E2-A1LS-01A TCGA-BH-A0B9-01A TCGA-E2-A1LL-01A
ZZZ3               4583             2047             7294             1984
ZZEF1              2144              851             4761             1698
ZYX               10216            20907            14932            15101
ZYG11B             2017              966             3507             1320

之后的操作你懂的。。。

尽情的玩耍吧!

(0)

相关推荐

  • GFF和GTF的异同及相互转换

    GFF(gff)全称为:general feature format GTF(gtf)全称为:gene transfer format 前者用来注释基因组,后者用来注释基因. 异同点: GTF文件和G ...

  • 如何查看百度知道APP的版本信息

    在使用百度知道APP时,我们如果想要查看当下所使用的软件是什么版本的话,该从哪儿着手呢?若是不知晓具体的操作步骤,来看看小编给出的介绍吧. 1.启动手机上已经安装好的百度知道APP. 2.进入百度知道 ...

  • SMT32固件中引入版本信息的方法

    平时我们写程序,通常都会备注软件版本,那么,怎么在单片机中保存版本信息呢? 方法其实有很多,但基本原理都是在指定存储区域(Flash)中写入软件版本信息. 嵌入式专栏 1 实现方法 下面就分享一个最常 ...

  • Excel函数版本信息查询表

    Excel函数版本信息查询表

  • 是否可以找到Sony产品的HDMI版本信息 | Sony China

    索尼更看重的是一个产品的功能而不是HDMI版本号.因为特定的HDMI版本可以支持相关的功能,却不代表产品一定支持这个功能. 例如,HDMI 版本1.3支持x.v.Color 技术,但产品本身不一定具有 ...

  • npm查看软件包版本信息

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/npm查看软件包版本信息 作者:融水公子 rsgz Node.js教程 Node.js教程 http://www.rsgz.top/post/11 ...

  • 广东专插本14门专业综合课教材版本信息及教材图片!

    广东专插本专业综合课(省统考) 1. 法理学 马克思主义理论研究和建设工程重点教材:<法理学>,人民出版社,高等教育出版社2010年. 2. 电子技术基础 ①康华光主编:<电子技术基 ...

  • (5条消息) 获取EXE版本信息 GetFileVersionInfo

    需要三个函数配合GetFileVersionInfoSize,GetFileVersionInfo,VerQueryValue. 1.  前两个函数的使用,为VerQueryValue做准备 DWOR ...

  • Linux系统下查看版本信息

    查看Linux内核版本命令(两种方法): 1.cat /proc/version 显示正在运行的内核版本. [root@S-CentOS home]# cat /proc/version Linux ...

  • 隐瞒信息乱跑导致感染判三年以上,其他情况最高可判死刑!!

    最近各种隐瞒行程导致疫情扩散的新闻越来越多,下面随便举几个例子. 其中下面这个相当恶劣,导致两名医护人员感染,一堆医护人员隔离,整个小区封闭管理. 可以看到新闻的表述,有些是以危险方法危害公共安全罪立 ...