【问题标题】:Mapping identifiers transitively可传递地映射标识符
【发布时间】:2014-02-02 01:56:46
【问题描述】:

我有三组标识符:“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) )

这可以在下图中可视化。请注意,每个箭头对应数据框中的一行。

问题: 如何使用这两个映射(两个数据框)进行映射 从xz(显示在上图的右侧)。一世 将其视为“传递映射”:x to yy to z 给出 x to 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 中。

【问题讨论】:

  • 您的图形看起来很漂亮。你是怎么做到的?
  • 它是用 Adob​​e Illustrator 手工绘制的。我曾考虑过使用 Rgraphviz 之类的东西,但不值得为这个小型的单一用例花费时间。

标签: r join merge dataset


【解决方案1】:

你想合并:

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

这有助于在必要时名称一致。

【讨论】:

  • 谢谢。当 28 个字符解决我的 1,655 个字符加数字问题时,我总是很开心。效果很好。
猜你喜欢
  • 2017-08-07
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多