Como transformar um quadro de dados em uma lista recursiva de listas (árvore)?
Entrada
roles_data <- data.frame(
Child = c("A", "B", "C", "D", "E", "F"),
ParentID = c(NA, "A", "B", "B", "D", "D") # The top-level role has no parent (NA)
)
Saída desejada
desired_output <- list(
list(
text = "A",
children = list(
list(
text = "B",
children = list(
list(
text = "C"),
list(
text = "D"
,
children = list(
list(
text = "E"
),
list(
text = "F"
) ) ) ) ) ) )
(Espero não ter mexido na tabela de saída na parte inferior, só preciso ter mais de um nível de profundidade.)
Você está descrevendo uma estrutura em árvore : cada pai pode ter vários filhos, mas cada filho tem exatamente um pai. Buscando por perguntas sobre árvores, isso é semelhante, em princípio, a " Transformar um dataframe em uma estrutura em árvore" (lista de listas) , no sentido de que podemos começar da raiz e recursivamente sobre os filhos. No entanto, como seus dados de entrada e saída estão em formatos diferentes, podemos fazer algo um pouco mais ergonômico. Basicamente, para cada nó, crie uma lista com
text = node_name
, e se houver filhos, construa recursivamente uma subárvore para eles.Se você realmente quiser a parte externa,
list()
você pode envolvê-la em uma:E aqui está a saída em json para fins de impressão: