美文网首页R学习与可视化
利用R语言求两文件匹配后兴趣列的交集

利用R语言求两文件匹配后兴趣列的交集

作者: kkkkkkang | 来源:发表于2020-05-22 22:15 被阅读0次

    问题:一个文件的pathway列和另外一个的pathway列匹配后,求它们上调基因的交集?

    我刚听见这个需求的时候,心想:害。这多简单,excel就能做。结果我试了下,VOOKUP函数确实可以实现。但要手动很多东西,几十个pathway下来,你搞一下午都不一定搞得完。果然excel不是生产力工具。

    先看文件结构: 文件1
    文件2

    这里只截取了前几行。总的来说就是要根据Level2列求它们共有Up_gene/Down_gene (每个单元格中都包含很多基因,它们以逗号分隔)

    方法一:excel

    • VOOKUP根据Level2列,把文件2的Up_gene/Down_gene对应到文件1上,再手动把文件1的Up_gene/Down_gene复制到新的表格,以逗号分隔符隔开。然后转置,复制一列作为待索取的值。然后同样把文件2的Up_gene/Down_gene复制到新的表格,以逗号分隔符隔开,然后转置。
    • 利用VLOOKUP函数根据文件2求文件1中的值,若是有重合值则显示。即所需。
    • 以这样的思路完成所有pathway的工作。

    方法二:核心就是R语言的intersect函数

    h_72 <- read.table("72h_KEGG_enrichment.txt",sep = "\t",header = T,row.names = 1)
    h_96 <- read.table("96h_KEGG_enrichment.txt",sep = "\t",header = T,row.names = 1)
    pathway_72 <- h_72$Pathway
    pathway_96 <- h_96$Pathway
    
    #72_up_vs_96_up
    for (i in 1:length(pathway_72)){
      pathway_72[i] <- strsplit(h_72$Up_gene[i],split = ",")
    }
    for (i in 1:length(pathway_96)){
      pathway_96[i] <- strsplit(h_96$Up_gene[i],split = ",")
    }
    up_72_and_96 <- list()
    for (i in h_72$Pathway){
      index_72 <- match(i,h_72$Pathway)
      index_96 <- match(i,h_96$Pathway)
      up_72_and_96[i] <- list(intersect(pathway_72[[index_72]],pathway_96[[index_96]]))
    }
    unlist_up_72_and_96 <- unlist(up_72_and_96)
    write.table(unlist_up_72_and_96,"up_72_and_96.txt",sep = "\t")
    
    #72_down_vs_96_down
    for (i in 1:length(pathway_72)){
      pathway_72[i] <- strsplit(h_72$Down_gene[i],split = ",")
    }
    for (i in 1:length(pathway_96)){
      pathway_96[i] <- strsplit(h_96$Down_gene[i],split = ",")
    }
    down_72_and_96 <- list()
    for (i in h_72$Pathway){
      index_72 <- match(i,h_72$Pathway)
      index_96 <- match(i,h_96$Pathway)
      down_72_and_96[i] <- list(intersect(pathway_72[[index_72]],pathway_96[[index_96]]))
    }
    unlist_down_72_and_96 <- unlist(down_72_and_96)
    write.table(unlist_down_72_and_96,"down_72_and_96.txt",sep = "\t")
    

    总体思路:文件1的pathway含有的基因各自加入到一个列表中,由于和文件2中的pathway名称顺序不对应,所以使用match函数获取文件1的pathway在文件2中的索引,然后取基因集合,intersect进行求值。得到重合的基因,加入到新的列表中,unlist解开列表,write.table写入文件即可。

    相关文章

      网友评论

        本文标题:利用R语言求两文件匹配后兴趣列的交集

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