下降 igraph 对象时边缘或节点属性的累积值
Cumulative value of an edge or node attribute while descending an igraph object
我有一个 igraph
对象 g
由数据框 df
:
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
是边缘属性。这可以认为是 'parent' 和 'child' 冰山之间的厚度变化(这是我的 problem/project)。
list.edge.attributes(g)
[1] "dt"
可视化:
plot(g, edge.label=E(g)$dt)
节点和边属性示例'dt'
我需要在从父节点到子节点的每个节点上找到 dt
的累加和。
当考虑 'ancestor'、'parent' 和 'child' 节点时,这相当于在每个 'child' 节点。
累计 dt
分配为边缘属性,预期结果示例
如果将这些累积值分配为新的节点或边缘属性,或其他形式的输出,则可以。
我试过 1) RNewsflow
包中的 network.aggregate
函数 & 2) data.tree
包中的 aggregate
函数。
提前感谢您的关注和帮助。
您确实可以为此使用 data.tree。虽然 Aggregate
会从 children 向 parent 求和,但据我了解,你想做相反的事情。所以以下将起作用:
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.07
我有一个 igraph
对象 g
由数据框 df
:
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
是边缘属性。这可以认为是 'parent' 和 'child' 冰山之间的厚度变化(这是我的 problem/project)。
list.edge.attributes(g)
[1] "dt"
可视化:
plot(g, edge.label=E(g)$dt)
节点和边属性示例'dt'
我需要在从父节点到子节点的每个节点上找到 dt
的累加和。
当考虑 'ancestor'、'parent' 和 'child' 节点时,这相当于在每个 'child' 节点。
累计 dt
分配为边缘属性,预期结果示例
如果将这些累积值分配为新的节点或边缘属性,或其他形式的输出,则可以。
我试过 1) RNewsflow
包中的 network.aggregate
函数 & 2) data.tree
包中的 aggregate
函数。
提前感谢您的关注和帮助。
您确实可以为此使用 data.tree。虽然 Aggregate
会从 children 向 parent 求和,但据我了解,你想做相反的事情。所以以下将起作用:
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.07