R 通过两个列名称合并两个行数不等的数据帧

R 通过两个列名称合并两个行数不等的数据帧,r,dataframe,dplyr,plyr,R,Dataframe,Dplyr,Plyr,我试图合并两个数据帧,比如说A和B,它们的行数和列数不等。它们有两个公共列,c1和c2。我知道一个事实,存在于一个数据帧中的每个c1 x c2组合也存在于另一个数据帧中,所以我不希望出现任何空值。A具有存在的每个c1 x c2组合的多个实例,而B恰好具有每个c1 x c2组合的一个实例。rbind和merge不起作用 如果两个数据帧是: c1 c2 c3 c4 1 A 1 5 1 2 B 2 4 2 3 B 1 3 4 4 A 2 3 4 5 A 1 3

我试图合并两个数据帧,比如说A和B,它们的行数和列数不等。它们有两个公共列,c1和c2。我知道一个事实,存在于一个数据帧中的每个c1 x c2组合也存在于另一个数据帧中,所以我不希望出现任何空值。A具有存在的每个c1 x c2组合的多个实例,而B恰好具有每个c1 x c2组合的一个实例。rbind和merge不起作用

如果两个数据帧是:

  c1 c2 c3 c4
1  A  1  5  1
2  B  2  4  2
3  B  1  3  4
4  A  2  3  4
5  A  1  3  3
6  B  2  1  8

然后我想以某种方式与c1和c2结合并产生:

  c1 c2 c3 c4 c5
1  A  1  5  1  5
2  B  2  4  2  4
3  B  1  3  4  3
4  A  2  3  4  8
5  A  1  3  3  5
6  B  2  1  8  4

A
A我们还可以使用join from
data.table
on

library(data.table)
setDT(df1)[df2, on= c("c1", "c2")][order(c1)]
#   c1 c2 c3 c4 c5
#1:  A  1  5  1  5
#2:  A  1  3  3  5
#3:  A  2  3  4  8
#4:  B  2  4  2  4
#5:  B  2  1  8  4
#6:  B  1  3  4  3

我们还可以使用join from
data.table
on

library(data.table)
setDT(df1)[df2, on= c("c1", "c2")][order(c1)]
#   c1 c2 c3 c4 c5
#1:  A  1  5  1  5
#2:  A  1  3  3  5
#3:  A  2  3  4  8
#4:  B  2  4  2  4
#5:  B  2  1  8  4
#6:  B  1  3  4  3
merge(A,B,by=c(“c1”,“c2”))
应该是workr
dplyr::full_join(A,B)
,在这种情况下并不特别好。在这两种情况下,如果愿意,您可以指定要通过
连接的列,但无论如何,它将通过列名的交集连接,这就是您在这里想要的。
merge(A,B,by=c(“c1”,“c2”)
should worker
dplyr::full_join(A,B)
,在这种情况下并不特别好。在这两种情况下,如果愿意,您可以指定要通过
联接的列,但无论如何,它将通过列名的交集联接,这正是您想要的。
library(data.table)
setDT(df1)[df2, on= c("c1", "c2")][order(c1)]
#   c1 c2 c3 c4 c5
#1:  A  1  5  1  5
#2:  A  1  3  3  5
#3:  A  2  3  4  8
#4:  B  2  4  2  4
#5:  B  2  1  8  4
#6:  B  1  3  4  3