我想比较两个非常大的数据帧,并在匹配列ID之后做出共识数据帧。
我的第一个数据框(input1)的一部分:
ID BGC_Class Start End BGC_Name Similarity MIBiG
GCA_000006785.2_ASM678v2 Bacteriocin 593677 606065 Streptolysin_S 100% BGC0000566
GCA_000169475.1_ASM16947v1 Bacteriocin 633235 645623 Streptolysin_S 100% BGC0000566
GCA_000433555.1_MGS126 Bacteriocin 524573 536961 Streptolysin_S 100% BGC0000566
second(input2):
ID Species_name Strain_name
GCA_000169475.1_ASM16947v1 [Ruminococcus]_gnavus [Ruminococcus]_gnavus_ATCC_29149_strain=ATCC_29149_
GCA_000433555.1_MGS126 [Ruminococcus]_gnavus [Ruminococcus]_gnavus_CAG:126__
我想匹配两个数据框中的“ ID”列,并在两个数据框中都匹配ID功能后创建一个新的数据框(结果)。因此,在理想情况下,输出数据帧将为:
ID Species_name Strain_name BGC_Class Start End BGC_Name Similarity MIBiG
GCA_000169475.1_ASM16947v1 [Ruminococcus]_gnavus [Ruminococcus]_gnavus_ATCC_29149_strain=ATCC_29149_ Bacteriocin 633235 645623 Streptolysin_S 100% BGC0000566
GCA_000433555.1_MGS126 [Ruminococcus]_gnavus [Ruminococcus]_gnavus_CAG:126__ Bacteriocin 524573 536961 Streptolysin_S 100% BGC0000566
为此,我尝试了R:
results<-data.frame(merge(input1,input2$ID, by.input1 = "input1$ID", by.input2 = "input2$ID"))
还有:
results <- match(input1$ID, input2$ID)
但是我在两个方面都遇到了相同的错误:
Error: vector memory exhausted (limit reached?)
我想知道在R中是否有任何内存有效的方法?
如果不是,是否可以通过awk / sed脚本来处理这些大型数据集文件? 所有评论表示赞赏。 谢谢。
注意:原始输入文件在这里: https://sites.google.com/site/iicbbioinformatics/share
答案 0 :(得分:0)
使用left_join
应该对您有用:
library(dplyr)
df <- left_join(input2, input1, by = "ID")
答案 1 :(得分:0)
我从未达到Awk中的内存限制;想知道它是否会发生在您身上。
awk -F, 'NR==FNR{a[$1]=$0} NR!=FNR{i=$1; $1=""; print a[i] $0}' input2.csv input1.csv
已更新以反映CSV文件
ID Species_name Strain_name BGC_Class Start End BGC_Name Similarity MIBiG
Bacteriocin 593677 606065 Streptolysin_S 100% BGC0000566
GCA_000169475.1_ASM16947v1 [Ruminococcus]_gnavus [Ruminococcus]_gnavus_ATCC_29149_strain=ATCC_29149_ Bacteriocin 633235 645623 Streptolysin_S 100% BGC0000566
GCA_000433555.1_MGS126 [Ruminococcus]_gnavus [Ruminococcus]_gnavus_CAG:126__ Bacteriocin 524573 536961 Streptolysin_S 100% BGC0000566
请注意,由于没有匹配的记录,因此输出的第二行很奇怪。请让我知道您想如何解决这个问题,我将在Awk中制作原型。