【问题标题】:Converting parent-child relationships in FK column into a hierarchical path string将 FK 列中的父子关系转换为分层路径字符串
【发布时间】:2016-10-28 09:23:22
【问题描述】:

我有一个数据框,它在名为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 列?

【问题讨论】:

    标签: r dataframe dplyr hierarchical-data


    【解决方案1】:

    你可以这样做:

    df$pathString=sapply(1:nrow(df), function(i) paste(df[,2][1:i],  collapse = '/'))
    

    【讨论】:

      【解决方案2】:

      您可能想直接使用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
      

      【讨论】:

        猜你喜欢
        • 2015-08-15
        • 2011-02-24
        • 2012-11-23
        • 2021-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多