我有两个数据帧,我正在尝试根据 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
您可以使用pmin
和pmax
对Allele1
和Allele2
中的数据进行排序,使用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