基于两列的R中的合并函数?

时间:2015-01-27 04:05:42

标签: r merge dataframe

我有两个这样的数据框架。

Table1
Sample Name Position A B C 
1      J    23       x x x
1      K    24       y y y
1      L    25       z z z


Table2
Sample Name Position A B C 
2      M    33       x x x
2      N    34       y y y
2      O    35       z z z

我希望决赛桌看起来像这样。

 FinalTable1
Sample Name Position A B C Sample Name Position A B C
1      J    23       x x x 2      J    23       Na Na Na
1      K    24       y y y 2      K    24       Na Na Na
1      L    25       z z z 2      L    25       Na Na Na 
Sample Name Position A B C Sample Name Position A B C
1      M    33       Na Na Na 2      M    33       0 0 0 
1      N    34       Na Na Na 2      N    34       0 0 0
1      O    35       Na Na Na 2      O    35       0 0 0

基本上,我想合并两个数据帧,因此两个数据帧在名称和位置方面的联合在最终表中,并且最终数据框填充了Na的不存在位置,在样本中#39; t具有那些基因/位置,但匹配样本(因此如果table1和table2都有P和数据,那么它们将被并排写入)。最终,我想合并8个这样的数据表。我一直试图在R上进行合并,但我似乎无法让它发挥作用。任何指导都会很棒。

谢谢!

1 个答案:

答案 0 :(得分:2)

你可以尝试

cbind(
   merge(tbl1, tbl2, by=c('Name', 'Position'), all.x=TRUE),
   merge(tbl1, tbl2, by=c('Name', 'Position'), all.y=TRUE))

如果要合并多个数据集,您可以将它们放在list中,然后使用Reducemerge。例如

lst <- list(tbl1, tbl2)
res1 <- Reduce(function(...) merge(..., by=c('Name', 'Position'), 
              all.x=TRUE), lst)

res2 <- Reduce(function(...) merge(..., by=c('Name', 'Position'), 
              all.y=TRUE), lst)
cbind(res1,res2)