R 按列匹配两个数据帧,并找到所有可能的匹配组合
假设我有两个data.frames:R 按列匹配两个数据帧,并找到所有可能的匹配组合,r,join,match,R,Join,Match,假设我有两个data.frames: A<-data.frame(a=c("b","a", "a", "e", "e","a"),Za=c(11,22,33,44,55,66)) B<-data.frame(b=c("a","a", "b", "e", "f","f"),Zb=c(11,22,33,44,55,66)) A如果使用大型数据集,请不要使用data.frame,而是使用data.table。以下是一个解决方案: A<-data.table(a=c("b","a",
A<-data.frame(a=c("b","a", "a", "e", "e","a"),Za=c(11,22,33,44,55,66))
B<-data.frame(b=c("a","a", "b", "e", "f","f"),Zb=c(11,22,33,44,55,66))
A如果使用大型数据集,请不要使用data.frame,而是使用data.table。以下是一个解决方案:
A<-data.table(a=c("b","a", "a", "e", "e","a"),Za=c(11,22,33,44,55,66))
B<-data.table(b=c("a","a", "b", "e", "f","f"),Zb=c(11,22,33,44,55,66))
df <- merge(A, B, by.x="a",by.y="b", all = TRUE)
df[,Match := ifelse(!is.na(Za),1,0)]
a Za Zb Match
1: a 22 11 1
2: a 22 22 1
3: a 33 11 1
4: a 33 22 1
5: a 66 11 1
6: a 66 22 1
7: b 11 33 1
8: e 44 44 1
9: e 55 44 1
10: f NA 55 0
11: f NA 66 0
a等待快速答案。在我的问题中,是否可以有两个单独的data.tables(data.frames)作为结果,例如Anew和Bnew,或者更好地添加一列索引,在该索引的位置Anew具有Bnew中的匹配项?我添加了一个匹配列。当它为1时,有一个匹配,当它为0时,没有匹配。我不确定它是否完全重复,因为OP还想添加关于a和b的信息。请参阅答案的注释。
A<-data.table(a=c("b","a", "a", "e", "e","a"),Za=c(11,22,33,44,55,66))
B<-data.table(b=c("a","a", "b", "e", "f","f"),Zb=c(11,22,33,44,55,66))
df <- merge(A, B, by.x="a",by.y="b", all = TRUE)
df[,Match := ifelse(!is.na(Za),1,0)]
a Za Zb Match
1: a 22 11 1
2: a 22 22 1
3: a 33 11 1
4: a 33 22 1
5: a 66 11 1
6: a 66 22 1
7: b 11 33 1
8: e 44 44 1
9: e 55 44 1
10: f NA 55 0
11: f NA 66 0