传递地映射标识符

我有三组标识符:“x”,“y”和“z”.我还有两个2列数据帧,每个数据帧将一组标识符映射到另一组标识符.

x2y = data.frame( x = c("A","A","B","B","C","D","E","F"),
                  y = c(1,2,1,2,3,4,4,5) )
y2z = data.frame( y = c(1,1,2,3,4,4,5,5,5),
                  z = c(1,2,3,3,6,7,6,7,8) )

这可以在下图中看到.请注意,每个箭头对应于数据框中的一行.

题:
如何使用这两个映射(两个数据帧)进行映射
从x到z(显示在上图的右侧).一世
将其视为“传递映射”:x到y和y到z给出x到z.
我想要的数据框架是……

x2z = data.frame( x = c("A","A","A","B","B","B","C","D","D","E","E","F","F","F"),
                  z = c(1,2,3,1,2,3,3,6,7,6,7,6,7,8) )

注意:我的数据帧通常约为50,000行,因此高效的代码非常重要.当我用循环解决了这个问题时,运行需要几分钟.
我唯一的要求是代码在R中.

最佳答案 你想合并:

merge(x2y, y2z)[c('x','z')]
##    x z
## 1  A 1
## 2  A 2
## 3  B 1
## 4  B 2
## 5  A 3
## 6  B 3
## 7  C 3
## 8  D 6
## 9  D 7
## 10 E 6
## 11 E 7
## 12 F 6
## 13 F 7
## 14 F 8

这有助于名称在必要时达成一致.

点赞