R函数在两个单独的数据框中查找匹配项?

R function to find matches in two separate dataframe?

我是 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

我只想从 table 2 中搜索 table 1 中的每个登录 ID,如果匹配,我想将 table 2 中的 V2 和 V4 复制到 table 1.

我该怎么做?提前致谢。

编辑:很抱歉造成混淆,Accession 是用于匹配的,V1 是第二个数据框中的匹配。

我想比较 'Q14258' 作为示例,从第一个数据帧到第二个数据帧 V1,如果匹配,我想从第二个数据帧获取 V2 和 V4,并在数据框 1。我希望这会清除它。

Edit2:我用过这个代码

matches <- 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

当你想合并两个数据帧时,你想使用 join

我做了一些示例数据,因为我不确定我是否理解你在问题中的数据。我知道 df1 中的 Accession 与 df2 中的 V1 相同。

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 中具有匹配键的列。它将 NA 用于 df1 中键的新列,而 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