我有两个数据框,我试图根据MarkerName,Allele1和Allele2合并它们。我的问题是等位基因1和等位基因2列有时可能会翻转并且情况不同(即下面两个示例中的第1行)。另外,有时可以复制MarkerName(第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
答案 0 :(得分:2)
您可以使用Allele1
和Allele2
对pmin
和pmax
中的数据进行排序,使用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