怎么实现ID转换

作者: mayoneday | 来源:发表于2019-03-03 16:21 被阅读0次

    读取文件

    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
    

    相关文章

      网友评论

        本文标题:怎么实现ID转换

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