我试图在遵循树结构的组织的不同子集中设计员工成本的解决方案。我在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
答案 0 :(得分:0)
对于一个&#34;问题&#34;这个问题太多了。在Stack Overfow。请阅读 How do I ask a good question?。 你需要自己尝试一些东西,当你遇到困难时,可以寻求具体的帮助。
然而,让我开始吧。要使用这样的图形,您需要能够选择所需的节点。
您可以使用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
您需要定义图层。这是节点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
请自己尝试休息。如果您遇到困难,请向我们展示您尝试过的代码以及它为什么不起作用。