按两列名称合并行数不相等的两个数据帧
Merging two dataframes with unequal numbers of rows by two columns names
我正在尝试合并行数和列数不相等的两个数据帧,比方说 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
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
我们也可以使用来自 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
我正在尝试合并行数和列数不相等的两个数据帧,比方说 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
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
我们也可以使用来自 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