如何在R语言中为网络分析生成员工共涉事件关联的权重列
R语言共事件员工边表生成方案
实现思路
- 按事件编号分组,将同事件下的员工生成不重复的两两配对
- 统一配对顺序(避免A-B和B-A被识别为不同配对)
- 统计每个配对的出现次数即为共参与事件的权重
依赖安装与加载
首选tidyverse套件实现,代码可读性高,适合新手:
# 首次使用先安装 install.packages("tidyverse") # 加载包 library(tidyverse)
完整实现代码
先替换示例数据为你自己的dataframe即可运行:
# ========== 替换为你自己的数据集 ========== df <- tibble( INCIDENT_NUM = c("2016111111", "2016111111", "2016111111", "2016111201", "2016111201"), EMPL_NO = c("EID0011", "EID0012", "EID0013", "EID0011", "EID0012") ) # ========== 核心处理逻辑 ========== edge_table <- df %>% # 按事件分组 group_by(INCIDENT_NUM) %>% # 生成同事件下员工的不重复两两组合,sort保证配对顺序一致 summarise(pair = combn(sort(EMPL_NO), 2, simplify = FALSE)) %>% unnest(pair) %>% ungroup() %>% # 拆分配对为From、To两列 mutate( From = map_chr(pair, ~.x[1]), To = map_chr(pair, ~.x[2]) ) %>% # 统计配对出现次数作为权重 count(From, To, name = "Weight")
输出效果
以上示例数据运行后得到的edge_table结果如下,完全符合需求:
| From | To | Weight |
|---|---|---|
| EID0011 | EID0012 | 2 |
| EID0011 | EID0013 | 1 |
| EID0012 | EID0013 | 1 |
性能说明
数千行级别的数据该方案可毫秒级完成处理,无需手动操作,结果可直接导出用于Gephi、igraph等网络分析工具。
内容的提问来源于stack exchange,提问作者gavinacw
相关产品推荐
相关产品推荐

