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

R语言如何将事件数据集转换为按规则赋值的两种邻接矩阵

R语言实现事件机构邻接矩阵生成方案

核心逻辑说明

先将每个事件的所有参与机构(最多3个)去重后生成两两配对,每对机构在同一事件中出现即视为一次共同参与,再基于配对数据统计两类指标,最后转换为行列均为唯一机构ID的邻接矩阵。

实现代码

前置依赖

首先加载数据处理所需包:

library(tidyverse)

步骤1:生成所有机构两两配对

org_pairs <- sample %>%
  rowwise() %>%
  mutate(
    # 提取当前事件所有机构,如需排除占位符0,可在末尾加 [c(org1, org2, org3) != "0"]
    orgs = list(unique(c(org1, org2, org3))),
    # 生成所有两两无序组合
    pairs = list(combn(orgs, 2, simplify = FALSE))
  ) %>%
  unnest_longer(pairs) %>%
  # 拆分配对的两个机构
  mutate(
    org_a = map_chr(pairs, 1),
    org_b = map_chr(pairs, 2)
  ) %>%
  select(id, org_a, org_b, BP, nr_participants) %>%
  ungroup()

# 提取所有唯一机构ID,用于补全矩阵行列
all_orgs <- sort(unique(c(sample$org1, sample$org2, sample$org3)))

步骤2:生成第一类邻接矩阵(共同参与人数总和)

# 统计每对机构的共同参与总人数
sum_cnt <- org_pairs %>%
  group_by(org_a, org_b) %>%
  summarise(total = sum(nr_participants), .groups = "drop")

# 转换为邻接矩阵,无共同参与的配对值为0
adj_matrix1 <- sum_cnt %>%
  complete(org_a = all_orgs, org_b = all_orgs, fill = list(total = 0)) %>%
  pivot_wider(names_from = org_b, values_from = total) %>%
  column_to_rownames("org_a") %>%
  as.matrix()

# 生成无向对称矩阵(可选,默认生成的是上三角有值的矩阵)
adj_matrix1[lower.tri(adj_matrix1)] <- t(adj_matrix1)[lower.tri(adj_matrix1)]
# 如需去掉自环(机构自身配对),可执行:diag(adj_matrix1) <- 0

步骤3:生成第二类邻接矩阵(BP=1事件占比)

# 统计每对机构共同参与事件中BP=1的占比
bp_ratio <- org_pairs %>%
  group_by(org_a, org_b) %>%
  summarise(
    total_event = n(),
    bp1_event = sum(BP == 1),
    ratio = bp1_event / total_event,
    .groups = "drop"
  )

# 转换为邻接矩阵,无共同参与的配对占比为0
adj_matrix2 <- bp_ratio %>%
  complete(org_a = all_orgs, org_b = all_orgs, fill = list(ratio = 0)) %>%
  pivot_wider(names_from = org_b, values_from = ratio) %>%
  column_to_rownames("org_a") %>%
  as.matrix()

# 生成无向对称矩阵(可选)
adj_matrix2[lower.tri(adj_matrix2)] <- t(adj_matrix2)[lower.tri(adj_matrix2)]
# 如需去掉自环,可执行:diag(adj_matrix2) <- 0

内容的提问来源于stack exchange,提问作者Erdne Htábrob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:09:03