首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解释合并/连接添加过多的行?

如何解释合并/连接添加过多的行?
EN

Stack Overflow用户
提问于 2020-06-16 21:44:58
回答 1查看 27关注 0票数 0

我有一个映射到一种蛋白质ID的基因数据集,然后我试图在另一个第二个数据集中找到这些蛋白质ID。第二个数据集相当大,有11759454行。我尝试使用merge或join查找匹配的蛋白质I,例如:

代码语言:javascript
复制
testdf <- join(proteindf, genes)  #or:
testdf <- merge(proteindf, genes, by.all='protein_id' , all.x=TRUE)

这些都会运行,但是行顺序会变得不合适,因为testdf的大小增加到了11775850行。

我不确定如何解决这个问题,我有生物学背景,并尝试运行合并的sql版本,但这是无限运行没有完成。

我不能提供完整的数据,但通常数据集如下所示:

代码语言:javascript
复制
#gene dataset:

     protein_id             Gene
1   9606.ENSP00000378868    A1CF
2   9606.ENSP00000384794    A4GALT
3   9606.ENSP00000324842    AACS
4   9606.ENSP00000000233    ARF5 
代码语言:javascript
复制
#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行可以是许多重复的,我认为这是导致问题的原因。

预期输出:

代码语言:javascript
复制
       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行。任何帮助理解这一点的人都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-06-16 22:42:01

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

首先,by.all应该是by。其次,您看到观察值数量增加的原因只能是,gene中的protein_id中的一些值有几个匹配(例如,该id在基因数据集中不是唯一的)。

我们可以使用testdf[duplicated(testdf$protein_id),]或:

代码语言:javascript
复制
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, ] 

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62410005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档