У меня есть объект 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
является атрибутом кромки. Это можно рассматривать как изменение толщины между «родительским» и «дочерним» айсбергом (это моя проблема/проект).
list.edge.attributes(g)
[1] "dt"
визуализировать:
plot(g, edge.label=E(g)$dt)
Пример узлов и атрибута ребра 'dt'
Мне нужно найти совокупную сумму dt
в каждом узле при спуске от родителя к дочернему элементу.
Если думать с точки зрения «предков», «родителей» и «дочерних» узлов, это эквивалентно получению кумулятивной суммы dt
для всех предков в каждом «дочернем» узле.
Совокупный dt
, назначенный в качестве атрибута края, пример ожидаемого результата
Это нормально, если эти кумулятивные значения назначаются как новые атрибуты узла или ребра или другая форма вывода.
Я пробовал 1) функцию network.aggregate
в пакете RNewsflow
и 2) функцию aggregate
в пакете data.tree
.
Заранее спасибо за интерес и помощь.
distances
может быть полезно.distances(g, "0", weights=E(g)$dt)
- person user20650   schedule 27.02.2017