将FK列中的父子关系转换为分层路径字符串

时间:2016-10-28 09:23:22

标签: r dataframe dplyr hierarchical-data

我有一个数据框,用于保持名为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列?

2 个答案:

答案 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