您可以使用 igraph 查看层和求和节点属性吗?

Can you use igraph to look at layers and sum node attributes?

我正在尝试为遵循树结构的组织的不同子集设计员工成本解决方案。我在 R 中使用 igraph 已经将一些示例代码和我试图回答的问题示例放在一起。我真的很感激一些帮助。谢谢

library(igraph)

# sample graph
g <- graph.tree(6, children = 2) %>% 
  set_vertex_attr("EmployeeID",value = LETTERS[1:6]) %>% 
  set_vertex_attr("Salary",value = 100 - 1:6*10) %>% 
  set_vertex_attr("label",value = paste("\n\n\nEmployee:",V(.)$EmployeeID,"\nSalary:",V(.)$Salary)) 

plot(g, layout=layout.reingold.tilford)

1.What是员工A下整个组织的成本? IE。遍历所有后代将薪水属性加起来:

90+80+60+50+70+40

2.What是第3层的成本?

60+50+40

3.Show每位经理的直接下属人数:

A:2
B:2
C:1

4.How很多员工只有1个直接下属?

1 Employee
C

Stack Overfow 上的一个 "question" 问题太多了。请阅读 How do I ask a good question?。 你需要自己尝试一些事情,当你遇到困难时,可以寻求具体的帮助。

但是,让我开始吧。要使用这样的图表,您需要能够 select 您想要的节点。

1.What是员工A下整个组织的成本吗?

您可以使用 subcomponent 来识别您想要的节点。

BelowA = subcomponent(g, which(V(g)$EmployeeID == "A") , mode = "out")
BelowA
+ 6/6 vertices:
[1] 1 2 3 4 5 6
sum(V(g)$Salary[BelowA])
[1] 390

2.What是第3层的成本吗?

您需要定义图层。那是到节点 A 的距离加一。然后 select 层 3 中的那些。

Depth = 1 + distances(g, v = which(V(g)$EmployeeID == "A"))
Depth
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    2    3    3    3
sum(V(g)$Salary[Depth == 3])
[1] 150

请尽量自己完成剩下的工作。如果您遇到困难,请向我们展示您尝试过的代码及其不起作用的原因。