R中基于两列的合并函数?
我有两个这样的数据帧R中基于两列的合并函数?,r,merge,dataframe,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 我希望最
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填充不存在的位置,在没有这些基因/位置的样本中,但匹配有这些基因/位置的样本(因此,如果表1和表2都有一个P和数据,那么它们将被并排写入)。最终,我想像这样合并8个数据表。我一直在尝试在R上使用merge,但我似乎无法让它工作。任何指导都会很好
谢谢!你可以试试
cbind(
merge(tbl1, tbl2, by=c('Name', 'Position'), all.x=TRUE),
merge(tbl1, tbl2, by=c('Name', 'Position'), all.y=TRUE))
如果要合并多个数据集,您可以将它们放入列表中
,然后使用Reduce
和merge
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)
lst谢谢您的帮助。因此,当我使用Reduce函数时,有三个不同长度的表,它不会给我tabl2的所有值。理想情况下,tabl1的所有值都应该在表2和tabl3中有一个匹配或NA,而表2和table3的值都相同,但是,table1的所有值都在那里,表2和table3的所有值都在那里表3在那里,但不是表2。换句话说,当我两次使用你的第一种方法时,我得到了我想要的结果(一次结合表1和表2,然后再次结合该结果和表3)。我想知道你是否对此有解决方案?我确实预料到了这个问题。你能用不同长度的数据集更新你的帖子吗?这样更容易编码。另一个问题是为什么你需要转换成宽
格式。我想长
表单可以提供更多信息,更容易检查结果s