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

如何用R识别图数据库式表格中的独立关联案例?

区分关联项目的案例(连通分量识别)

嘿,这个问题本质上是要找出图中的连通分量——每个案例就是一组相互关联(直接或间接)的项目集合。下面用R语言给出简洁高效的实现方案:

步骤1:准备原始数据

先重现你的输入数据,转成数据框方便后续操作:

# 构造原始矩阵并转为数据框
my_table <- matrix(c(1,1,2,3,4,5,7,8,9,10,2,3,5,5,5,6,9,10,11,11), ncol=2)
colnames(my_table) <- c("FROM", "TO")
my_table <- as.data.frame(my_table)

步骤2:用igraph识别连通分量

igraph包是处理图结构数据的利器,刚好适合解决这类连通性问题:

# 安装并加载igraph(如果未安装)
if (!require(igraph)) {
  install.packages("igraph")
  library(igraph)
}

# 创建无向图:因为项目关联是双向的(比如1→2和2→1属于同一案例)
g <- graph_from_data_frame(my_table, directed = FALSE)

# 获取每个节点的连通分量ID——同一连通组的节点会被分配相同的ID
component_ids <- components(g)$membership

# 将分量ID匹配到原表格,生成CASE列
my_table$CASE <- component_ids[as.character(my_table$FROM)]

# 查看最终结果
print(my_table, row.names = FALSE)

运行后你会得到预期的输出:

FROM TO CASE
    1  2    1
    1  3    1
    2  5    1
    3  5    1
    4  5    1
    5  6    1
    7  9    2
    8 10    2
    9 11    2
   10 11    2

原理说明

  • components(g)$membership会为每个连通的节点分配唯一的组ID,完美对应你的“案例”定义;
  • 无向图的设定保证了关联关系的双向性,确保间接关联的项目(比如1和5)会被分到同一个案例;
  • 即使后续新增关联(比如项目1和7关联),这个方法也会自动将它们合并为同一个案例,完全符合“每个项目只能属于一个案例”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:52:38