[英]Cumulative value of an edge or node attribute while descending an igraph object
我有一個由dataframe df
制作的igraph
對象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
和。
累積的dt
被指定為邊緣屬性,預期結果示例
如果將這些累積值指定為新節點或邊緣屬性或其他形式的輸出,則可以。
我試圖1) network.aggregate
在功能RNewsflow
包和2)的aggregate
在功能data.tree
包。
提前感謝您的關注和幫助。
你確實可以使用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.07
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.