使用两列名称合并两个具有不等行数的数据帧

时间:2016-03-23 03:33:34

标签: 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  3
6  B  2  1  8

  c1 c2 c5
1  A  1  5
2  B  2  4
3  B  1  3
4  A  2  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

2 个答案:

答案 0 :(得分:2)

A <- data.frame(c1=c('A','B','B','A','A','B'),c2=c(1,2,1,2,1,2),c3=c(5,4,3,3,3,1),c4=c(1,2,4,4,3,8),stringsAsFactors=F);
B <- data.frame(c1=c('A','B','B','A'),c2=c(1,2,1,2),c5=c(5,4,3,8),stringsAsFactors=F);
merge(A,B,c('c1','c2'));
##   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  1  3  4  3
## 5  B  2  4  2  4
## 6  B  2  1  8  4

答案 1 :(得分:0)

我们还可以使用onlibrary(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

的联接
{{1}}