You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将data.tree树结构转回保留原始行的DataFrame并添加层级信息

解决方法

我们可以通过data.tree的节点遍历功能提取所有节点的完整层级路径,再与原始DataFrame合并,实现为每一行添加对应child的完整层级信息。

步骤1:准备示例数据

先构造父子关系的示例DataFrame并转换为树结构:

library(data.tree)

# 原始父子结构数据
x <- data.frame(
  parent = c(NA, "Root", "Root", "A", "A", "B"),
  child = c("Root", "A", "B", "A1", "A2", "B1")
)

# 转换为树结构
my_tree <- FromDataFrameNetwork(x)

步骤2:提取所有节点的完整层级信息

遍历树的所有节点,获取每个节点的根到自身的层级路径,生成对应DataFrame:

# 遍历节点提取层级信息
hierarchy_df <- lapply(my_tree$Get(function(node) node), function(node) {
  # 获取根到当前节点的路径
  path <- node$path
  # 命名层级列(Level1、Level2...)
  hierarchy_cols <- setNames(path, paste0("Level", seq_along(path)))
  # 组合child节点名与层级列
  c(data.frame(child = node$name), as.data.frame(t(hierarchy_cols)))
}) %>% do.call(rbind, .)

步骤3:与原始DataFrame合并

按child列合并原始数据和层级信息,确保原始数据的每一行都被保留:

# 合并得到最终结果
result <- merge(x, hierarchy_df, by = "child", all.x = TRUE)

结果示例

运行后result会包含原始父子列及完整层级列,行数与原始DataFrame一致:

child parent Level1 Level2 Level3
1    A   Root   Root      A   <NA>
2   A1      A   Root      A     A1
3   A2      A   Root      A     A2
4    B   Root   Root      B   <NA>
5   B1      B   Root      B     B1
6  Root   <NA>   Root   <NA>   <NA>

关键说明

  • node$path可直接获取根到当前节点的完整路径,无需手动拼接
  • all.x = TRUE保证原始DataFrame的所有行都被保留,包括根节点

内容的提问来源于stack exchange,提问作者deschen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:42:47