我有一个数据框,用于保持名为parent_id
的fk列中行之间的父子关系。
我想将此dataframe
转换为分层数据结构,例如data.tree
,等同于列表列表。
以下是我的输入dataframe
:
df = data.frame(id = 1:3, name = c("asia", "iran", "tehran"), parent_id = c(NA, 1, 2))
df
# id,name,parent_id
# 1,asia,NA
# 2,iran,1
# 3,tehran,2
这是将输入转换为的目标输出。在这里,我添加了一个名为pathString
的新列,其中包含每行的分层父子路径。
# target data:
#
# id,name,parent_id,pathString
# 1,asia,NA,asia
# 2,iran,1,asia/iran
# 3,tehran,2,asia/iran/tehran
如何在行之间生成包含父子关系的pathString
列?
答案 0 :(得分:0)
你可以这样做:
df$pathString=sapply(1:nrow(df), function(i) paste(df[,2][1:i], collapse = '/'))
答案 1 :(得分:0)
您可能希望直接使用FromDataFrameNetwork
,例如像这样的东西:
library(data.tree)
df <- data.frame(parent_id = c(0, 1, 2), id = 1:3, name2 = c("asia", "iran", "tehran"), stringsAsFactors = FALSE)
tree <- FromDataFrameNetwork(df)
tree$name2 <- "world"
tree$Do(function(x) x$id <- x$name)
tree$Do(function(x) x$name <- x$name2)
print(tree, "id")
这将打印:
levelName id
1 world 0
2 °--asia 1
3 °--iran 2
4 °--tehran 3