【问题标题】:R: add column based on existing column relationshipR:根据现有的列关系添加列
【发布时间】:2017-11-07 18:08:13
【问题描述】:

我有一个用于以表格形式表示有向图关系的数据框。现在我一次考虑三个节点。我有node1和node2之间的关系,以及node2和node3之间的关系,每个都有对应的边权重。在极少数情况下,node1 和 node3 之间存在关系,但我无法隔离它。 本质上,我有 A -> B 和 B -> C,并且想找到 A -> C。 这是数据框的示例。

df
      node1    node2   weight1     node2_a     node3   weight2
       5         2        .2          2         7        .3
       10        20       .4         20         30       .6
       10        30       .3         30         8        .3

所以,我基本上想再写三列,看起来像这样

new_df
      node1    node2   weight1     node2_a     node3   weight2   node1.a     node3.a     weight3
       5         2        .2          2         7        .3         na          na          na
       10        20       .4         20         30       .6         10          30          .3
       10        30       .3         30         8        .3         na          na         na

我知道可能有更好的方法可以做到这一点,但我很好奇如何让它像这样工作。谢谢,如果不清楚,我很乐意进一步解释。

【问题讨论】:

  • 我认为 data.table 可能是我最好的选择,可能还有左连接,但不能完全正确。
  • 1和2、2和3有什么关系?

标签: r graph


【解决方案1】:

这或多或少地为您提供所需的东西......

merge(df, df[1:3], 
      by.x=c("node1","node3"), by.y=c("node1","node2"), 
      all.x=TRUE)

  node1 node3 node2 weight1.x node2_a weight2 weight1.y
1     5     7     2       0.2       2     0.3        NA
2    10     8    30       0.3      30     0.3        NA
3    10    30    20       0.4      20     0.6       0.3

这会重新排序数据框,但这可能无关紧要。您可能希望对列重新排序和重命名(weight1.y 是您的 weight3),并将您的 node1.anode3.a 列添加为等于 node1node3 的那些行 weight1.y不是NA

【讨论】:

  • 这非常好,正是我想要做的。非常感谢。
猜你喜欢
  • 2019-09-29
  • 1970-01-01
  • 2013-01-18
  • 2018-08-13
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
相关资源
最近更新 更多