簡體   English   中英

降序igraph對象時邊或節點屬性的累積值

[英]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_idid之間進行。

> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM