美文网首页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语言求两文件匹配后兴趣列的交集

    问题:一个文件的pathway列和另外一个的pathway列匹配后,求它们上调基因的交集? 我刚听见这个需求的时候...

  • R语言取两列的交集

    杀杀 在数据分析中我们有时需要对矩阵取交集 比如我们有如上两个矩阵,在R中我们可以用intersect函数来取它们...

  • 数组求交集算法

    数组求交集的方法1.暴力搜索2.利用HashMap3.先排序再用两个指针查找4.位图法5.大文件求交集用分治法,组...

  • 两个文件两列匹配

    因工作中经常遇到在两个文件中匹配相同列的内容,用python3实现了。参考链接两个源文件格式在github pan...

  • 【R语言】利用mean()求比例

    在R语言学习过程中,常用函数的特殊用法常常会令人困惑。mean()一个普遍的用法是用来求解算术平均数,而同时用其求...

  • excel技巧

    使用Excel求两列的交集 转载:https://jingyan.baidu.com/article/c1a310...

  • AFE问题

    两个包含100亿整型数据文件,10m内存,求交集?1.1 其中一个文件改成只有100个整型的话,还是求交集,怎么优...

  • 两文件匹配并添加替换

    按两文件匹配并添加 两文件比较并替换 file1 file2 思路:把file1的第一列与file2的">"后的内...

  • 使用R语言实现bedtools求交集的功能?

    Bedtools作为基因组研究的 “ 瑞士军刀 ”, 功能强大且易于操作,是生信行业不可多得的好软件。通常对bed...

  • 2019-01-06

    R语言如何把一列分割为两列? gene <- data[,1:2] %>% separate(gene_id,c(...

网友评论

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

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