ID转化主要分为二步
Ⅰ、得到探针一一对应的基因名
Ⅱ、将 矩阵中的探针 转换成 对应的基因名
而转化的核心就是在第一步——“如何得到对应的基因名”,方法有三
① 通过平台已有R包进行转化
② 通过下载平台数据,提取信息
③ 通过 bitr()函数进行转化
方法一、通过平台已有R包进行转化
(1)、首先下载数据,获取平台信息及表达矩阵
library(GEOquery)
eSet <- getGEO("GSE42872",
destdir = '.',
getGPL = F)
exp <- exprs(eSet[[1]]) # 表达矩阵
GPL <- eSet[[1]]@annotation # 平台信息——提取芯片平台编号
GPL
(2)、 得到平台信息后,我们可以去到 jimmy 大神总结的GPL平台对应R包网站
用R获取芯片探针与基因的对应关系三部曲中找到对应的R包
注意, jimmy 大神网页里面的R包名称不是全称,要在后面加“.db”
例如:hugene10sttranscriptcluster----->hugene10sttranscriptcluster.db
#如果没有下载过这个包,就下载一下,代码如下
BiocManager::install(hugene10sttranscriptcluster.db)
#提取信息
library(hugene10sttranscriptcluster.db)
ls("package:hugene10sttranscriptcluster.db") #大致查看R包中的信息,寻找我们需要的SYMBOL
ids <- toTable(hugene10sttranscriptclusterSYMBOL) #用toTable()函数提取
head(ids) #查看提取内容
probe_id 和 symbol 就是我们想要的探针、基因名
方法二、通过下载平台数据,提取信息
不是每个平台都提供了很好的平台信息,有一些平台的平台信息就没有对应的gene symbol,所以我们需要尝试多种方法,由于GSE42872平台恰好没有,我就换了个GSE举例子,但对于GSE42872能够用R包转化就够了,不需要再找平台信息多此一举,换GSE只是为了更好的举例子
读取GPL文件可参考GEO数据库学习总结(一)数据下载
library(GEOquery)
# 读取在GEO官网下载的平台文件
GPL=getGEO(filename = 'GSE42872_family.soft.gz')
# 提取信息(可以通用)
gpl=GPL@gpls[[1]]@dataTable@table
# 我只要ID和symbol
ids=gpl[,c(1,12)]
# 写出文件
write.table(ids,file = "ids.txt",siep = "\t",row.names=F,col.names = T)
方法三、通过 bitr()函数进行转化
有些GSE的ID着实可恨,既没有对应的R包,官网的平台数据也没有对应的symbol (例如GSE42872平台信息没有对应的symbol),寻寻觅觅,只能放出终极大招——通过 bitr()函数进行转化,强制将ID转成我们需要的symbol格式,!注意,这个方法不一定可以将全部的ID转化成gene symbol
# 首先打开这两个R包
library(clusterProfiler)
library(org.Hs.eg.db)
# 如果没有这两个R包,就运下面的代码进行下载
# if(!require("BiocManager")) install.packages("BiocManager",update = F,ask = F)
# options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
# BiocManager::install("clusterProfiler")
# BiocManager::install("org.Hs.eg.db")
# 查看数据类型(就是这个R包提供哪些个ID类型可供转化)
keytypes(org.Hs.eg.db)
## 下面这个是R包org.Hs.eg.db拥有的ID类型,可供选择,对应原来的ids里面的类型
## ID的格式,你挑一个出来和下面的是对应的
# [1] "ACCNUM" "ALIAS" "ENSEMBL" "ENSEMBLPROT" "ENSEMBLTRANS" [图片上传中...(661771789232197568.jpg-f54963-1593781817202-0)]
"ENTREZID"
# [7] "ENZYME" "EVIDENCE" "EVIDENCEALL" "GENENAME" "GO" "GOALL"
# [13] "IPI" "MAP" "OMIM" "ONTOLOGY" "ONTOLOGYALL" "PATH"
# [19] "PFAM" "PMID" "PROSITE" "REFSEQ" "SYMBOL" "UCSCKG"
# 确保数据格式为数据框
ids1=as.data.frame(ids)
ids <- bitr(ids1$ID, #你的数据框
fromType = "ENSEMBLPROT", #你的ID的数据类型
toType = "SYMBOL", #转化的数据类型
OrgDb = org.Hs.eg.db) #org.Hs.eg.db——人类
#最后得出的ids就是结果
通过上述三个方法我们得到了ID对应的symbol,接下来只需要将symbol列对应进矩阵就好了
# 如果打不开这个包就下载一下
# install.packages("dplyr")
library(dplyr)
colnames(ids) = c("probe_id" ,"symbol")
exp <- mutate(exp,probe_id=rownames(probe_exp))#将行名变为列名为probe_id的一列
# exp是原来的表达矩阵
exp2= merge(exp,ids,by.x="probe_id", by.y="probe_id") # 合并数据
exp2=exp2[!duplicated(probe_exp$symbol),]# 按照symbol列去重
rownames(exp2)=exp2$symbol # 数据框probe_exp的行名变成symbol
gene_exp_matrix <- na.omit(exp2 ) # 去空值
#输出文件
write.table(gene_exp_matrix2,file = "Gastric.cancer.geneid.exprs.txt",sep = "\t",row.names=T,col.names = T)
最后就可以得到了我们需要的表达矩阵了\(^ _ ^)/
感谢生信技能树的无私分享,如果上述有因学艺不精表述错误的地方,请大家多多指正