【问题标题】:How to account for merge/join adding excess rows?如何考虑合并/加入添加多余的行?
【发布时间】:2020-06-16 13:44:58
【问题描述】:

我有一个基因数据集,我映射到一种蛋白质 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

我随后使用合并创建另一个数据集(将基因的 protein_id 重命名为 protein_id1)以获取“protein_id1”列的基因名称,这也给了我相同的 11775850 行。任何有助于理解这一点的帮助将不胜感激。

【问题讨论】:

    标签: r join merge bioinformatics


    【解决方案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, ] 
    

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

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 1970-01-01
      • 2018-03-04
      • 2017-12-26
      • 2013-10-06
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多