你能用igraph来查看图层和求和节点属性吗?

时间:2018-01-18 17:29:14

标签: r igraph

我试图在遵循树结构的组织的不同子集中设计员工成本的解决方案。我在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.员工A下整个组织的成本是多少?即遍历所有后代以添加salary属性:

90+80+60+50+70+40

2.第3层的成本是多少?

60+50+40

3.显示每位经理的直接下属数量:

A:2
B:2
C:1

4.有多少员工只有1份直接举报?

1 Employee
C

1 个答案:

答案 0 :(得分:0)

对于一个&#34;问题&#34;这个问题太多了。在Stack Overfow。请阅读 How do I ask a good question?。 你需要自己尝试一些东西,当你遇到困难时,可以寻求具体的帮助。

然而,让我开始吧。要使用这样的图形,您需要能够选择所需的节点。

1.员工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.第3层的费用是多少?

您需要定义图层。这是节点A加1的距离。然后选择第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

请自己尝试休息。如果您遇到困难,请向我们展示您尝试过的代码以及它为什么不起作用。