我正在尝试合并两个数据帧,比如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
答案 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)
我们还可以使用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
{{1}}