“山穷水尽疑无路,柳暗花明又一村”
某天,想收集一类药物的作用靶点,上了Drugbank获取了全部数据,加载到R中,解析出来后蒙圈了,它居然一个基因靶点对应了多个名称。这就很为难了。
怎么从基因全称获取它的缩写呢?
我知道Uniprot可以弄,但小白一个个输入查询,那就很痛苦了!
能不能从基因的全称来批量获取其缩写呢?
到群上提了问,又双叒叕得到 jimmy老师的点拨。
当然可以!org.Hs.eg.db包可以做!
代码如下:
library(org.Hs.eg.db)#org.Hs.eg.db 是用于geneID转换的包。物种为人类。Bioconductor上还有提供其他物种的。
eg2Symbol=toTable(org.Hs.egSYMBOL)##将包中gene_symbol转换成数据框
eg2name=toTable(org.Hs.egGENENAME)##将包中GENENAME转换成数据框
anno=merge(eg2Symbol,eg2name,by='gene_id')#根据gene_id合并两个数据框
genes=read.table('symbol.txt',stringsAsFactors = F)[,1]##导入自己的gene数据
anno[match(genes,anno$gene_name),]##match函数匹配索引,获得自己的数据在包中整出来的数据框中的行位置
write.csv(anno[match(genes,anno$symbol),],'symbol2name.csv')##写出文件0
代码里面很巧妙地用了两次Totable函数,虽然还不太懂它的作用,但好不好用,看效果,一运行就得到了基因和全称对应的数据框。
这样的数据放到R里可是轻轻松松可以认识的!
OK,之后导入数据执行代码。
几秒钟,瞬间无痛解决基因从全称到缩写的转换问题!
虽然Drugbank有点坑,有些基因全称因为和包中提供的全称不一致所有没办法匹配上,但总算是最大程度解决了我的困惑。
此外,读了下生信菜鸟团的相关推文,发现这个包还有其他转换的用法。
看一眼包中的所含的信息
keytypes(org.Hs.eg.db)#包里面有的数据注释类别共有26个
# [1] "ACCNUM" "ALIAS" "ENSEMBL" "ENSEMBLPROT" "ENSEMBLTRANS" "ENTREZID"
#[7] "ENZYME" "EVIDENCE" "EVIDENCEALL" "GENENAME" "GO" "GOALL"
#[13] "IPI" "MAP" "OMIM" "ONTOLOGY" "ONTOLOGYALL" "PATH"
#[19] "PFAM" "PMID" "PROSITE" "REFSEQ" "SYMBOL" "UCSCKG"
#[25] "UNIGENE" "UNIPROT"
比如,可以借助select函数从ENSG0编号或是ENTREZID获取对应的基因名称及全称。当然从基因的名称或者全称反过来获取前两者也是可以的。
select函数的结构
select(org.Hs.eg.db, keys= , columns= , keytype=" ")
##例如 想通过基因全称获取它的缩写和ENTREZID 。这里的基因名就是keytype
ensids <- c("tumor protein p53")#基因的全称
cols <- c("SYMBOL","ENTREZID")#想提取的包中含有的相应信息所在的列
select(org.Hs.eg.db, keys=ensids, columns=cols, keytype="GENENAME")##keytype设置输入的类型。这里是基因的名字。
bingo!运行完的结果
以此类推,要获取什么类别的信息,只要改函数中数据的key、colums对象,和keytype就好了!
最后,饮水思源,附上技能树相关链接!
课程分享
生信技能树全球公益巡讲
(https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g)
B站公益74小时生信工程师教学视频合辑
(https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw)
招学徒:
(https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw)