首页 > 解决方案 > 如何根据第二个数据帧中的外观保留一个数据帧中的数据?

问题描述

我有 2 个包含类似数据的数据框。我知道数据框 2 中的数据在整个数据框 1 中重复出现。我想从数据框 1 中提取所有行,这些行的 ID 与数据框 2 中看到的 ID 匹配。例如,数据框 1 的行长约为 40,000 行蛋白质和 ID 列:

  Protein |    ID|
# 4521     33PB
# 6743     67TR
# 6743     67TR
# 6743     63YH
# 5571     84RW

Dataframe 2 只有大约 10 行长,包含多列信息,但我只关心 ID 列。数据框 2:

Length |  Family      | ID 
# 700      transferase   33PB
# 478      Cytochrome    67TR
# 341      Cytochrome    23FD
# 902      Methyl        00QA
# 554      p450          76LK

我正在尝试生成一个数据框,其中包含来自数据框 1 的 ID,其中包含在数据框 2 中找到的 ID,同时也为了维护其行中的相关蛋白质。例如,我希望输出为:

Protein  |  ID
# 4521       33PB
# 6743       67TR
# 6743       67TR

我尝试使用intersect()ID 列,但是这总是返回一个空数据框,filter()使用%in%. 我也尝试过if(){}声明,但是这些声明并没有返回我的结果。我不确定是否有一个简单的函数可以使用,或者我是否应该设置一个while()循环。不过我没有这方面的经验,所以不知道从哪里开始。

任何建议都将不胜感激,我已经坚持了几个小时。先感谢您。

标签: rdataframefilterintersect

解决方案


只是为了说明我的评论:

library(tidyverse)

df1 %>% filter(ID %in% unique(df2$ID))
#>   Protein   ID
#> 1    4521 33PB
#> 2    6743 67TR
#> 3    6743 67TR

reprex 包(v2.0.1)于 2021-08-08 创建

使用@TarJae 提供的数据框


推荐阅读