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

在R中基于数据框构建企业间邻接矩阵的技术求助

R语言构建企业间员工共享与流动邻接矩阵

首先预处理数据,将原数据中字符型的"NA"转换为真实缺失值,避免后续处理出错:

dd <- data.frame(company=c(1,1,2,2,3,3,4,4),
                  date=c("2020_01","2020_02","2020_01","2020_02","2020_01","2020_02","2020_01","2020_02"),
                  employee1 = c("A","A","B","B","C","C","D","U"),
                  employee2 = c("E","NA","F","F","A","A","Z","Z"),
                  employee3 = c("NA","NA","NA","NA","B","B","Y","E"))
# 转换字符型NA为真实缺失值
dd[dd == "NA"] <- NA

1. 企业间共享员工的邻接矩阵

核心思路是找出在多家企业任职的员工,统计每对企业共享的员工数量:

library(dplyr)
library(tidyr)

# 整理员工-企业对应关系,生成共享员工的企业对
shared_pairs <- dd %>%
  pivot_longer(cols = starts_with("employee"), values_to = "employee") %>%
  filter(!is.na(employee)) %>%
  group_by(employee) %>%
  filter(n_distinct(company) >= 2) %>%
  summarise(pairs = list(t(combn(sort(unique(company)), 2)))) %>%
  unnest(pairs) %>%
  separate(pairs, into = c("from", "to"), sep = " ", convert = TRUE) %>%
  count(from, to, name = "shared_count")

# 生成邻接矩阵
companies <- sort(unique(dd$company))
shared_adj_matrix <- matrix(0, nrow = length(companies), ncol = length(companies),
                            dimnames = list(companies, companies))

# 填充矩阵对称位置的值
for (row in 1:nrow(shared_pairs)) {
  shared_adj_matrix[as.character(shared_pairs$from[row]), as.character(shared_pairs$to[row])] <- shared_pairs$shared_count[row]
  shared_adj_matrix[as.character(shared_pairs$to[row]), as.character(shared_pairs$from[row])] <- shared_pairs$shared_count[row]
}

# 查看结果
print(shared_adj_matrix)

运行后得到的矩阵中,仅企业1与3的位置值为1,对应共享员工"A",其余均为0。


2. 企业间员工流动的邻接矩阵

核心思路是追踪员工在不同时间的企业归属变化,统计每对企业间的员工流动次数:

# 整理员工流动的企业对
movement_pairs <- dd %>%
  pivot_longer(cols = starts_with("employee"), values_to = "employee") %>%
  filter(!is.na(employee)) %>%
  mutate(date = factor(date, levels = c("2020_01", "2020_02"), ordered = TRUE)) %>%
  arrange(employee, date) %>%
  group_by(employee) %>%
  mutate(prev_company = lag(company)) %>%
  filter(!is.na(prev_company) & prev_company != company) %>%
  count(prev_company, company, name = "move_count") %>%
  rename(from = prev_company, to = company)

# 生成邻接矩阵
movement_adj_matrix <- matrix(0, nrow = length(companies), ncol = length(companies),
                              dimnames = list(companies, companies))

# 填充矩阵流动方向的值
for (row in 1:nrow(movement_pairs)) {
  movement_adj_matrix[as.character(movement_pairs$from[row]), as.character(movement_pairs$to[row])] <- movement_pairs$move_count[row]
}

# 查看结果
print(movement_adj_matrix)

运行后得到的矩阵中,仅企业1到4的位置值为1,对应员工"E"从企业1流动到企业4,其余均为0。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:46:19