r语言 - 如何解释合并/连接添加多余的行?



我有一个基因数据集,我映射到一种蛋白质ID。然后,我尝试在另一个第二个数据集中找到这些蛋白质ID。第二个数据集在 11759454 行时非常大。我尝试通过合并或连接找到匹配的蛋白质 ID,例如:

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行。任何有助于理解这一点的帮助将不胜感激。

由于缺乏编码示例,目前尚不清楚问题到底是什么。

首先,by.all应该是by的。其次,你看到观察数量增加的原因只能是,gene中的某些值protein_id有几个匹配项(例如,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, ] 

此问题的解决方案取决于您的数据集(如果确实存在问题(。

最新更新