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

如何用指定R包将CSV中的不规则层级结构扁平化?

不规则层级结构扁平化实现方案

需求说明

我有一个垂直展示不规则(ragged)层级结构的.csv文件,其中indent_nbr表示每个条目在层级中的级别(0代表顶级父节点),原始数据如下:

data <- data.frame(
  item = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R"),
  indent_nbr = c(0,1,2,3,4,4,4,5,5,5,5,4,5,5,5,5,3,4),
  stringsAsFactors = FALSE
)

需要将其扁平化为每行对应一个叶子节点完整层级路径的矩阵形式:

[,1] [,2] [,3] [,4] [,5] [,6]
 [1,] "A"  "B"  "C"  "D"  "E"  NA  
 [2,] "A"  "B"  "C"  "D"  "F"  NA  
 [3,] "A"  "B"  "C"  "D"  "G"  "H" 
 [4,] "A"  "B"  "C"  "D"  "G"  "I" 
 [5,] "A"  "B"  "C"  "D"  "G"  "J" 
 [6,] "A"  "B"  "C"  "D"  "G"  "K" 
 [7,] "A"  "B"  "C"  "D"  "L"  "M" 
 [8,] "A"  "B"  "C"  "D"  "L"  "N" 
 [9,] "A"  "B"  "C"  "D"  "L"  "O" 
[10,] "A"  "B"  "C"  "D"  "L"  "P" 
[11,] "A"  "B"  "C"  "Q"  "R"  NA  

实现代码(仅使用base包)

以下代码通过维护当前层级路径、遍历更新路径并判断叶子节点,完成扁平化转换:

# 读取CSV数据(外部文件替换为read.csv("your_file.csv", stringsAsFactors = FALSE))
data <- data.frame(
  item = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R"),
  indent_nbr = c(0,1,2,3,4,4,4,5,5,5,5,4,5,5,5,5,3,4),
  stringsAsFactors = FALSE
)

# 计算最大层级,确定矩阵列数
max_level <- max(data$indent_nbr) + 1

# 初始化结果列表与当前路径向量
result_list <- list()
current_path <- rep(NA_character_, max_level)

# 遍历每一行数据,更新路径并收集叶子节点的完整路径
total_rows <- nrow(data)
for (idx in 1:total_rows) {
  current_indent <- data$indent_nbr[idx]
  
  # 重置当前层级之后的路径为NA,设置当前层级的节点值
  current_path[(current_indent + 2):max_level] <- NA
  current_path[current_indent + 1] <- data$item[idx]
  
  # 判断是否为叶子节点:最后一行 或 下一行层级不大于当前层级
  if (idx == total_rows || data$indent_nbr[idx + 1] <= current_indent) {
    result_list[[length(result_list) + 1]] <- current_path
  }
}

# 将结果列表转换为矩阵
flat_matrix <- do.call(rbind, result_list)

# 查看结果
print(flat_matrix)

代码说明

  1. 路径维护:通过current_path向量实时记录当前节点的完整层级路径,每次处理新节点时,先重置当前层级之后的位置为NA,再更新当前层级的节点值,确保路径的正确性。
  2. 叶子节点判断:当处理到最后一行,或下一行的层级不大于当前节点层级时,说明当前节点是叶子节点,将其完整路径加入结果列表。
  3. 矩阵转换:将收集到的所有叶子节点路径列表转换为矩阵,得到最终的扁平化结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:34:52