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]]
}))