R语言生信ID转化

怎么实现ID转换

2019-03-03  本文已影响0人  mayoneday

读取文件

a=read.table("ensembl.txt")
a

对原ID进行分割

str_split
(a$V1,"[.]")#分割字符串,取a中叫V1的列,把去出列中的元素,根据点号进行分割,因为点号代表任何,所以按照其分割应该时加中括号
image.png image.png

把分割好的list文件转换为matrix

unlist(str_split
(a$V1,"[.]"))#list变为了字符串向量,但我们要得到的是matrix,才能通过[,1]对其进行取行列元素的操作
unlist(str_split
(a$V1,"[.]",simplify=T))#加入simplify=T,表示不返回list,文件变为matrix

取其中的第一列,得到ensemble_id

a$ensemble_id=unlist(str_split
(a$V1,"[.]",simplify=T))[,1]#[,1]为取第一列的意思,分离然后取出的目的是因为后面需要用到此元素
image.png

a表变为了下图

image.png

通过固定的包得到基因ID之间的固定关系,得到如下两个表(不用理解)

library(org.Hs.eg.db)
g2s=toTable(org.Hs.egSYMBOL)
g2e=toTable(org.Hs.egENSEMBL)
g2e g2s

把三个表按照共有的元素先后拼接到一起

b=merge(a,g2e,by="ensemble_id",all.x=T)#a和g2e按照相同的元素ensemble_id关联起来得到表b
b
d=merge(b,g2s,by="gene_id",all.x=T)#b和g2s按照相同的元素gene_id关联起来得到表d
d

把d的顺序调整得和a相同

d=d[order(d$V1),]#把d按照V1列进行排序
table(d$sensembl_id)[table(d$sensembl_id)>1]
#因为d为拼接的表格,可一个对应几个的问题,所以V1数量多余a,要先把其中重复的去掉
#table(d$sensembl_id)>1此命令意为sensembl_id列中计数大于1的
#table(d$sensembl_id)[ ]表示对于sensembl_id列中元素计数进行挑选
#table(d$sensembl_id)[table(d$sensembl_id)>1]的意义为挑选出计数中大于1的那些元素,意思重复的元素
d=d[!duplicated(d$v1),]#!duplicated意味去掉重复的,从而把V1中所有的元素变成唯一
d=d[match(a$V1,d$V1),]#a所在的顺序放到d这里来,match意为以a的顺序来排列d
上一篇下一篇

猜你喜欢

热点阅读