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

如何将R中存储树路径的宽表dataframe转为节点上游网络长表

R实现宽格式树路径转全上游节点邻接表

实现思路

核心逻辑是对每条根到叶的路径,生成所有前驱节点和后继节点的配对,再补充无下游节点的空值行即可,适配任意列数、多根节点的数据集。

实现代码

# 加载依赖包
library(tidyverse)

# 处理逻辑
result <- df_wide %>%
  # 逐行提取非NA的路径节点
  pmap_dfr(function(...) {
    path <- na.omit(c(...))
    path_len <- length(path)
    # 路径长度不足2的无配对,直接返回空
    if (path_len < 2) return(tibble())
    # 生成所有i<j的节点配对(i为down,j为对应up)
    expand.grid(i = seq_len(path_len - 1), j = seq(i + 1, path_len)) %>%
      transmute(
        down = path[i],
        up = path[j]
      )
  }) %>%
  # 去重重复的配对记录
  distinct() %>%
  # 补充无下游节点的记录,up填NA
  {
    all_nodes <- unique(c(.$down, .$up))
    nodes_with_downstream <- unique(.$down)
    nodes_no_downstream <- setdiff(all_nodes, nodes_with_downstream)
    bind_rows(., tibble(down = nodes_no_downstream, up = NA_real_))
  } %>%
  # 可选:按down列排序,匹配示例输出顺序
  arrange(down)

代码特性

  • 无需指定宽表列数,自动适配任意层级的路径数据
  • 原生支持多根节点场景,无需额外修改逻辑
  • 内置去重逻辑,避免重复的节点配对

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:36:00