R语言实现ID转换

作者: 随缘清风_ee55 | 来源:发表于2019-03-24 19:45 被阅读73次

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

对原ID进行分割

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

把分割好的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

作者:mayoneday

链接:https://www.jianshu.com/p/98dd5b704105

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

相关文章

网友评论

    本文标题:R语言实现ID转换

    本文链接:https://www.haomeiwen.com/subject/kxcpvqtx.html