首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >沿或节点属性降序时的累积值

沿或节点属性降序时的累积值
EN

Stack Overflow用户
提问于 2017-02-26 21:30:30
回答 1查看 430关注 0票数 1

我有一个由dataframe igraph df生成的g对象:

代码语言:javascript
复制
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之间形成的。

代码语言:javascript
复制
> 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是边缘属性。这可以看作是“父母”和“孩子”之间的厚度变化(这是我的问题/项目)。

代码语言:javascript
复制
list.edge.attributes(g)
[1] "dt"

想象:

代码语言:javascript
复制
plot(g, edge.label=E(g)$dt)

节点和边缘属性'dt'示例

我需要在每个节点找到dt 的累积和,然后从父节点降到子节点.。

当考虑“祖先”、“父”和“子”节点时,这相当于获得每个“子”节点上所有祖先的dt的累积和。

指定为edge属性的累积dt,预期结果示例

如果将这些累积值赋值为新的节点或边缘属性或另一种形式的输出,则可以。

我已经尝试过1) network.aggregate函数在RNewsflow包中& 2) aggregate函数在data.tree包中。

提前感谢您的关心和帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-27 10:04:16

您确实可以为此使用data.tree。虽然Aggregate会总结从孩子到父母,从我的理解,你想做相反的事情。因此,以下内容将发挥作用:

代码语言:javascript
复制
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")

这将打印为:

代码语言:javascript
复制
          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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42474487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档