怎么实现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