使用 dplyr left join 合并两个数据框?

KLM117

我有两个数据框competitor_sheetleft_join_prototype,我将它们分别称为 df1 和 df2, df1 和 df2 分别包含有关基因和疾病 ID 的信息,如下所示:

df1:

HUGO_symbol MeSH_ID
P53 D000310
A1BG D0002277
ZZZ3 D000230

df2:

基因名称 父级MeSH.ID 子代号
P53 D000310 D015675、D006676
HGA2 D031031 D002277
ZZZ3 D001163, D000230 D003451

如您所见,df2 可能在父和子 MeSH ID 中包含多个 ID。本质上,如果子代或父代中的任何 MeSH ID 对应于 df1 中的 MeSH ID,​​我想要做的是将 df2 中的任何行左连接到 df1,但仅当 Gene.Name = HUGO_symbol 时,最终产品应该看起来像这样:

HUGO_symbol MeSH_ID 基因名称 父.Mesh.ID 子代号
P53 D000310 P53 D000310 D015675、D006676
ZZZ3 D000230 ZZZ3 D001163、D00230 D003451

我已经尝试过使用 dplyr 的东西,看起来像这样:

proto <- left_join(df1,df2, by = c("MeSH_ID"="Parent.MeSH.ID", "HUGO_Symbol"="Gene.Name", "MeSH_ID2"="Child.MeSH.ID"))proto新桌子在哪里,但我觉得这是错误的。

与往常一样,非常感谢任何帮助:)

斯蒂芬

问题是 left_join 寻找完全匹配,没有什么像“匹配这个或那个”。因此,要达到您想要的结果,您可以

  1. 团结Parent.MeSH.IDChild.MeSH.ID放入一个新列MeSH_ID
  2. 使用例如将联合列拆分为单独的 ID tidyr::separate_rows这样做可以通过 ID 加入 df。
  3. 使用 ansemi_join过滤掉 df1 中与新创建的 df3 中匹配的行,最后执行 aleft_join添加来自 df3 的列。或者,如果保留两者都无关紧要HUGO_symbolGene.Name您可以使用inner_join.
df1 <- data.frame(
  stringsAsFactors = FALSE,
       HUGO_symbol = c("P53", "A1BG", "ZZZ3"),
           MeSH_ID = c("D000310", "D0002277", "D000230")
)

df2 <- data.frame(
  stringsAsFactors = FALSE,
         Gene.Name = c("P53", "HGA2", "ZZZ3"),
    Parent.MeSH.ID = c("D000310", "D031031", "D001163, D000230"),
     Child.MeSH.ID = c("D015675, D006676", "D002277", "D003451")
)

library(dplyr)
library(tidyr)

df3 <- df2 %>%
  unite("MeSH_ID", Parent.MeSH.ID, Child.MeSH.ID, sep = ", ", remove = FALSE) %>% 
  separate_rows(MeSH_ID, sep = ", ")

semi_join(df1, df3, by = c("HUGO_symbol" = "Gene.Name", "MeSH_ID")) %>% 
  left_join(df3)
#> Joining, by = "MeSH_ID"
#>   HUGO_symbol MeSH_ID Gene.Name   Parent.MeSH.ID    Child.MeSH.ID
#> 1         P53 D000310       P53          D000310 D015675, D006676
#> 2        ZZZ3 D000230      ZZZ3 D001163, D000230          D003451

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在dplyr的left_join中使用as_label / as_name而不是quo_name连接两个数据集

使用left_join()连接两个数据帧

匹配两个数据表(Vlookup、dplyr、match()、left_join)保持行数

如何使用dplyr合并两个数据框以汇总同一列的值?

left_join (dplyr) 使用函数

将两个数据框与left_join合并会在“ right”列中产生NA

使用dplyr合并来自两个数据帧的信息

使用 Dplyr 合并两个数据集

覆盖left_join dplyr以更新数据

复杂的绑定列(使用 dplyr 使用 left_join 和 bind cols 重新组织数据)

将dplyr中的left_join与指定的合并变量一起使用

如何使用dplyr * _join()函数的两个“ by”参数在R中组合两个数据集?

在自定义函数中使用 dplyr::left_join

合并和dplyr的left_join的异常行为

使用dplyr和stringdist通过stringmatch合并两个数据帧

MYSQL合并两个表中的两列,仍然使用LEFT JOIN

为什么我不能在 R 中使用 left_join 合并两个文件?

如何使用 dplyr left_join 在数据框中添加属性作为列表元素并根据需要将其导出到文本文件中?

合并两个数据框而不使用for循环

如何使用两个主数据帧和Purrr的Pmap和Dplyr的Semi_Join过滤几个数据帧

LEFT JOIN在两个列表使用Java流

SQL LEFT JOIN两个表而不使用GROUP BY

用dplyr的left_join编写函数

dplyr left_join小于,大于条件

dplyr left_join()按行名

dplyr left_join匹配不适用

如何在R中使用inner_join,dplyr将应按2列匹配的两个数据帧连接在一起?

使用 _PARTITIONDATE LEFT JOIN

使用POSIXct格式化两个不同的数据帧以进行left_join()-ing