如何解释mergejoin添加多余的行?

问题描述 投票:0回答:1

我有一个基因的数据集,我将其映射到一种类型的蛋白质ID。然后,我试图在另一个第2个数据集中找到这些蛋白质ID。第2个数据集相当大,有11759454行。我试图找到我的匹配的蛋白质IDs与合并或连接例如。

testdf <- join(proteindf, genes)  #or:
testdf <- merge(proteindf, genes, by.all='protein_id' , all.x=TRUE)

这些都可以运行,但是行的顺序和 testdf 增长到11775850的行数。

我不知道如何解决这个问题,我有生物背景,也试过运行sql版本的合并,但是这个运行不完就无限期的运行。

我不能提供完整的数据,但一般数据集是这样的。

#gene dataset:

     protein_id             Gene
1   9606.ENSP00000378868    A1CF
2   9606.ENSP00000384794    A4GALT
3   9606.ENSP00000324842    AACS
4   9606.ENSP00000000233    ARF5 
#proteindf:
       protein_id                 protein_id1    coexpression experiments database
1   9606.ENSP00000000233    9606.ENSP00000272298        0          0        0
2   9606.ENSP00000000233    9606.ENSP00000253401        0          0        0
3   9606.ENSP00000000233    9606.ENSP00000401445        0          0        0
4   9606.ENSP00000000233    9606.ENSP00000418915        0          0        0

protein_id行可能会有很多重复,我想这也是问题的原因。

预期的输出。

       protein_id           Gene            protein_id1    coexpression experiments database
1   9606.ENSP00000000233     ARF5       9606.ENSP00000272298        0          0        0
2   9606.ENSP00000000233     ARF5       9606.ENSP00000253401        0          0        0
3   9606.ENSP00000000233     ARF5       9606.ENSP00000401445        0          0        0
4   9606.ENSP00000000233     ARF5       9606.ENSP00000418915        0          0        0

我接着用merge创建了另一个数据集(将基因的protein_id重命名为protein_id1),也得到了 "protein_id1 "列的基因名称,这也给了我同样的11775850行。任何帮助理解这一点将被感激。

r join merge bioinformatics
1个回答
1
投票

由于缺乏编码实例,不清楚问题到底出在哪里。

首先。by.all 应是 by. 第二,你看到的观测值数量增加的原因只能是,有几个匹配的值在 protein_idgene (例如,id在基因数据集中不是唯一的)。

我们可以使用以下方法提取重复的行 testdf[duplicated(testdf$protein_id),] 或。

genes$growid <- seq_len(nrow(genes))
proteindf$prowid <- seq_len(nrow(proteindf))
mdf <- merge(proteindf, merge, by = 'protein_id', all.x = TRUE)
gids_dups <- duplicated(mdf$growid)
pids_dups <- duplicated(mdf$prowid)
#Gene duplicate rows
mdf[gids_dups, ] 
#protein duplicate rows (should be the same)
mdf[pids_dups, ] 

这个问题的解决取决于你的数据集,如果它确实是一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.