Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中基于两列的合并函数?_R_Merge_Dataframe - Fatal编程技术网

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