我有一个数据框,我用它来表格表示有向图关系。现在我一次考虑三个节点。我有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
我知道可能有更好的方法可以做到这一点,但我很好奇我怎么能让它像这样工作。谢谢,如果不清楚我很乐意进一步解释。
答案 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.a
和node3.a
列添加为等于node1
和{对于那些node3
不是weight1.y
的行,我会{1}}。