0

找到报告线内的第一个批准人,该批准人至少高 2 个等级。例如,等级 0 比等级 2 高两个等级。

员工图

我正在尝试创建一个新的节点属性 Approver,它应该为员工 H、E、F、G 填充,它们都应该将批准者标识为员工 A。

我一整天都在试图弄清楚这一点,但并不真正了解如何进行一跳遍历,更不用说几次了。我的理解是,呼吸优先搜索 BFS 将从叶节点开始,然后沿着树向上工作。我真的很纠结如何访问树的不同部分。

非常感谢任何帮助。

library(tidygraph)
library(visNetwork)

# sample graph
g <- tidygraph::create_tree(8,2) %>% 
  activate(nodes) %>% 
  mutate(Employee = LETTERS[1:8],
         Grade = c(0,1,1,1,2,2,2,2),
         label = paste("Emp",Employee,"Grade",Grade)
         )

visIgraph(g,layout="layout_as_tree", flip.y=F,idToLabel = F)

g %>% activate(nodes) %>% 
  mutate(Approver = map_bfs_back(node_is_root(),.f = function(node,path,...){
    #If starting node grade - node grade >= 2 then Approver Employee ID
  }))
4

1 回答 1

1

花了一段时间才弄清楚这一点。不确定其他人是否对此类查询感兴趣?希望对某人有所帮助。

g %>% activate(nodes) %>% 
  mutate(P = map_bfs_chr(node_is_root(),.f = function(node,path, ...){
    .N()$Employee[tail(path$node[ .N()$Grade[node] - .N()$Grade[path$node] >= 2],1)[1]]
  }))
于 2018-07-05T10:05:26.700 回答