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

如何基于多列演员姓名DataFrame生成正确的邻接矩阵?

如何从多列演员数据生成全连接邻接矩阵

你的问题核心是要让同一行内的所有演员两两之间都建立边关系,而graph_from_data_frame(data)默认只会把前两列当作节点对处理,所以需要先把每行的演员转换成完整的两两边列表,再构建图生成邻接矩阵。

步骤1:构造示例数据(已有数据可跳过)

# 构造你提供的示例数据框
data <- data.frame(
  演员1 = c("Mary", "Lucy", "Nicolas", "Angela"),
  演员2 = c("Anna", "Sara", "rob", "Mary"),
  演员3 = c("bob", "bob", NA, "Anna"),
  演员4 = c("jack", "Alice", NA, NA),
  stringsAsFactors = FALSE
)

步骤2:生成完整的演员边列表

library(igraph)

# 逐行处理数据,生成所有两两演员对
edge_list <- do.call(rbind, apply(data, 1, function(row) {
  # 过滤当前行的NA值,得到有效演员列表
  actors <- na.omit(row)
  # 当演员数量≥2时,生成所有无序两两组合
  if (length(actors) >= 2) {
    combn(actors, 2, simplify = FALSE) %>% 
      lapply(function(pair) data.frame(from = pair[1], to = pair[2], stringsAsFactors = FALSE)) %>% 
      do.call(rbind, .)
  } else {
    # 演员数量不足2时返回空数据框
    data.frame(from = character(0), to = character(0), stringsAsFactors = FALSE)
  }
}))

步骤3:构建图并生成邻接矩阵

# 构建无向图(确保A-B和B-A视为同一条边)
ig <- graph_from_data_frame(edge_list, directed = FALSE)
# 生成邻接矩阵(sparse=FALSE返回普通矩阵,方便查看)
adj_matrix <- get.adjacency(ig, sparse = FALSE)

结果说明

生成的adj_matrix是对称矩阵,其中adj_matrix[i,j] = 1表示演员i和演员j在同一行出现过(即存在边关系),0表示无关系。比如:

  • Mary对应的行/列中,Anna、bob、jack、Angela的位置都会是1;
  • bob对应的行/列中,Mary、Anna、jack、Lucy、Sara、Alice的位置都会是1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:40:25