R:根据现有列关系添加列

时间:2017-11-07 18:08:14

标签: r graph

我有一个数据框,我用它来表格表示有向图关系。现在我一次考虑三个节点。我有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

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

1 个答案:

答案 0 :(得分:0)

这或多或少会为您提供所需的内容......

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列添加为等于node1和{对于那些node3不是weight1.y的行,我会{1}}。