R:根据跨三个不同列的 mtaching 值合并两个数据帧



我有两个数据帧,我正在尝试根据 MarkerName、Allele1 和 Allele2 合并它们。我的问题是等位基因 1 和等位基因 2 列有时可以翻转并且是不同的情况(即下面两个示例中的第 1 行(。此外,有时标记名称可以重复(第 3 行和第 4 行(。

以下是示例:

MarkerName  id     Allele1 Allele2
1: 1:752721  rs3131972  A  G
2: 1:791853  rs6684487  G  A
3: 1:834056 rs28482280  A  C
4: 1:834056 rs28482282  A  CAC
5: 1:834059 rs28482242  A  C,G

MarkerName Allele1 Allele2  Effect 
1:   1:752721       g       a -0.0018 
2:   1:791853       g       a  0.0408 
3:   1:834056       a       c  0.0079 

有没有办法将 id 列添加到 R 中的第二个数据帧?所以最后它看起来像这样:

MarkerName Allele1 Allele2  Effect id
1:   1:752721       g       a -0.0018 rs3131972
2:   1:791853       g       a  0.0408 rs6684487
3:   1:834056       a       c  0.0079 rs28482280

您可以使用pminpmaxAllele1Allele2中的数据进行排序,使用separate_rows获取不同行中的数据并连接它们。

library(dplyr)
df1 %>%
tidyr::separate_rows(Allele2) %>%
mutate(col1 = tolower(pmin(Allele1, Allele2)), 
col2 = tolower(pmax(Allele1, Allele2))) %>%
right_join(df2 %>%
mutate(col1 = tolower(pmin(Allele1, Allele2)), 
col2 = tolower(pmax(Allele1, Allele2))),  
by = c('MarkerName', 'col1', 'col2')) %>%
select(MarkerName, id, Allele1 = Allele1.y, Allele2 = Allele2.y, Effect)

#  MarkerName         id Allele1 Allele2  Effect
#1   1:752721  rs3131972       g       a -0.0018
#2   1:791853  rs6684487       g       a  0.0408
#3   1:834056 rs28482280       a       c  0.0079

最新更新