Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按列匹配两个数据帧,并找到所有可能的匹配组合_R_Join_Match - Fatal编程技术网

R 按列匹配两个数据帧,并找到所有可能的匹配组合

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",

假设我有两个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", "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