【问题标题】:R function to find matches in two separate dataframe? [closed]R函数在两个单独的数据框中查找匹配项? [关闭]
【发布时间】:2021-08-12 18:15:54
【问题描述】:

我是 R 编程新手,所以我搜索了很多,但找不到我正在寻找的确切内容。

我有两个类似的数据框;

数据框 1:

Accession `Gene Symbol`  `siCON-1` `siCON-2` `siCON-3` `siTR-1` `siTR-2` `siTR-3` `log2(siTR/s~   p_val `-log10(t.test si~
  <chr>     <chr>              <dbl>     <dbl>     <dbl>        <dbl>        <dbl>        <dbl>             <dbl>   <dbl>              <dbl>
1 Q14258    TRIM25            2283.     2570.     2749.         489          498.         480.             -2.37  1.14e-4              3.94 
2 Q9P035    PTPLAD1; HACD3    1080.      857.     1060.         338.         439.         264              -1.52  1.74e-3              2.76 
3 Q9NP99    TREM1               45.7      NA        65.3         55           32.7          3.2            -0.873 3.10e-1              0.508
4 P35226    BMI1; COMMD3-~      46.3      42.6      36.1         12.3         23.7         12.6            -1.36  6.03e-3              2.22 
5 Q14117    DPYS                44.9      NA        73.1         51.7         36.9          0.8            -0.985 2.79e-1              0.554
6 Q6IAN0    DHRS7B             173.      149.      213.          92.3         73.7         62.6            -1.22  7.77e-3              2.11 

数据框 2:

      V1            V2                                                  V3                     V4  V5           V6
1 A0A075B6P5  R-HSA-109582  https://reactome.org/PathwayBrowser/#/R-HSA-109582             Hemostasis TAS Homo sapiens
2 A0A075B6P5 R-HSA-1280218 https://reactome.org/PathwayBrowser/#/R-HSA-1280218 Adaptive Immune System TAS Homo sapiens
3 A0A075B6P5 R-HSA-1280218 https://reactome.org/PathwayBrowser/#/R-HSA-1280218 Adaptive Immune System IEA Homo sapiens
4 A0A075B6P5 R-HSA-1643685 https://reactome.org/PathwayBrowser/#/R-HSA-1643685                Disease TAS Homo sapiens
5 A0A075B6P5 R-HSA-1643685 https://reactome.org/PathwayBrowser/#/R-HSA-1643685                Disease IEA Homo sapiens
6 A0A075B6P5  R-HSA-166658  https://reactome.org/PathwayBrowser/#/R-HSA-166658     Complement cascade TAS Homo sapiens

我只想从表 2 中的表 1 中搜索每个 Accession ID,如果匹配,我想将表 2 中的 V2 和 V4 复制到表 1 中。

我该怎么做?提前致谢。

编辑:抱歉造成混淆,Accession 是匹配项,V1 是第二个数据帧中的匹配项。

我想将“Q14258”作为示例从第一个数据帧与第二个数据帧 V1 进行比较,如果匹配,我想从第二个数据帧中获取 V2 和 V4,并在数据帧 1 中添加新列。我希望这可以清除它。

Edit2:我用过这段代码

matches &lt;- match(dataframe1$Accession,dataframe2$V1)

我可以找到位置,但我后来卡住了。

 [1]  87059 130058 126612  50691  86417  97429  80338     NA     NA  34876 132613 138390  86681  48874     NA     NA     NA 121653     NA
  [20]  83210     NA     NA  22832  98354 104386  80531  11963    338     NA  58060  50032  12127 133036  11434 111307  26229     NA  89105
  [39] 107669   2329  57826     NA  12101  35659     NA 100915     NA 119519     NA     NA  92556 128938  13341 130104 133727 103605     NA
  [58] 105145 124370  27343     NA 100357  47092  93135  39138  66942     NA  23662 116234     NA  85757     NA 125647     NA     NA     NA
  [77]  59705     NA 109960  44700 135309 121942     NA  74508     NA     NA 111882  15365  94138 122808 137613  58407  28641     NA 110505
  [96]  76572     NA 104295     NA 130022  71937  63190 101249 113658 133776  36281     NA  61907  56843     NA  94265  24763 119085  81442
 [115]     NA     NA  89343     NA     NA 100597     NA   4782 131283  88704     NA     NA  67450  57507 118512  10851     NA  12182  58482

【问题讨论】:

  • 我在数据框 2 中看不到 Accession ID。请提供您的样本数据的预期输出并说明如何识别匹配项。
  • 感谢@Limey,我想以“Q14258”为例,从第一个数据帧到第二个数据帧 V1 进行比较,如果匹配,我想从第二个数据帧中获取 V2 和 V4在数据框 1 中添加新列。我希望这可以清除它。谢谢
  • Q14258 没有出现在数据框 2 的任何位置,因此无法匹配。
  • 谢谢@Limey,我没有把所有数据放在这里,它是由大约 600k 数据组成的数据框的顶部。能告诉我你是怎么搜索的吗?谢谢

标签: r dataframe bioinformatics bioconductor


【解决方案1】:

当您想要组合两个数据框时,您想要使用join

我制作了一些示例数据,因为我不确定我是否理解问题中的数据。我了解Accessionin df1 与V1in df2 相同。

library(tidyverse)

df1 <- tribble(
    ~Accession, ~GeneSymbol,
        'Q1', 'TRIM25',
        'Q2', 'PTPLAD1',
        'Q3', 'TREM1' )
df2 <- tribble(
    ~V1, ~V2,
    'Q1', 'R-HSA-109581',
    'Q2', 'R-HSA-109582',
    'Q4', 'R-HSA-109583',
    'Q5', 'R-HSA-109584',
    'Q6', 'R-HSA-109585' )
)

如何进行连接取决于您想要什么。对于 inner_join(),结果包含 df1 和 df2 中的键 (Accession)。

df1 %>% 
    inner_join(df2, by=c("Accession" = "V1"))
# A tibble: 2 x 3
  Accession GeneSymbol V2          
  <chr>     <chr>      <chr>       
1 Q1        TRIM25     R-HSA-109581
2 Q2        PTPLAD1    R-HSA-109582

left_join() 保留 df1 (Accession) 中的所有键,并从 df2 添加具有匹配键的列。它为 df1 中的键的新列放置 NA,而 df2 中没有匹配项。

df1 %>% 
    left_join(df2, by=c("Accession" = "V1"))
# A tibble: 3 x 3
  Accession GeneSymbol V2          
  <chr>     <chr>      <chr>       
1 Q1        TRIM25     R-HSA-109581
2 Q2        PTPLAD1    R-HSA-109582
3 Q3        TREM1      NA

还有其他种类的连接。查看 Hadley Wickham 的书中 R for Data Science 中的信息。

【讨论】:

  • 非常感谢@Aaron,这是一个很好的解释。也感谢你为我提供 R 书。我肯定会详细介绍它。
  • 没问题。如果它解决了您的问题,您会接受答案吗?
猜你喜欢
  • 2015-08-05
  • 2022-01-02
  • 1970-01-01
  • 2020-07-04
  • 2021-08-29
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多