我有一个由dataframe igraph df生成的g对象:
df <- data.frame(c(0,1,2,2,4), c(1,2,3,4,5), c(0.01, 0.03, 0.05, 0.01, 0.02))
colnames(df) <- c('parent_id', 'id', 'dt')
g <- graph_from_data_frame(df)边缘是在parent_id和id之间形成的。
> g
IGRAPH DN-- 6 5 --
+ attr: name (v/c), dt (e/n)
+ edges (vertex names):
[1] 0->1 1->2 2->3 2->4 4->5变厚dt是边缘属性。这可以看作是“父母”和“孩子”之间的厚度变化(这是我的问题/项目)。
list.edge.attributes(g)
[1] "dt"想象:
plot(g, edge.label=E(g)$dt)节点和边缘属性'dt'示例

我需要在每个节点找到dt 的累积和,然后从父节点降到子节点.。
当考虑“祖先”、“父”和“子”节点时,这相当于获得每个“子”节点上所有祖先的dt的累积和。
指定为edge属性的累积dt,预期结果示例

如果将这些累积值赋值为新的节点或边缘属性或另一种形式的输出,则可以。
我已经尝试过1) network.aggregate函数在RNewsflow包中& 2) aggregate函数在data.tree包中。
提前感谢您的关心和帮助。
发布于 2017-02-27 10:04:16
您确实可以为此使用data.tree。虽然Aggregate会总结从孩子到父母,从我的理解,你想做相反的事情。因此,以下内容将发挥作用:
library(data.tree)
df <- get.data.frame(g, what = "edges")
dtr <- FromDataFrameNetwork(df)
dtr$dtcum <- 0
dtr$Do(function(node) node$dtcum <- node$parent$dtcum + node$dt, filterFun = isNotRoot)
print(dtr, "dt", "dtcum")这将打印为:
levelName dt dtcum
1 0 NA 0.00
2 °--1 0.01 0.01
3 °--2 0.03 0.04
4 ¦--3 0.05 0.09
5 °--4 0.01 0.05
6 °--5 0.02 0.07https://stackoverflow.com/questions/42474487
复制相似问题