r Tidygraph найти первого родителя в иерархии, которая соответствует критериям

Найдите первого утверждающего в пределах строки отчетности, которая как минимум на 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
  }))

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]]
  }))
Другие вопросы по тегам