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

如何用R从调查数据生成邻接矩阵与ID-姓名映射表

解决方案

1. 准备工作

安装并加载所需R包:

install.packages(c("readxl", "dplyr", "tidyr"))
library(readxl)
library(dplyr)
library(tidyr)

2. 读取Excel数据

假设Excel文件名为survey_data.xlsx,数据位于Sheet1:

# 读取数据并重命名第一列为受访者姓名
raw_data <- read_excel("survey_data.xlsx", sheet = "Sheet1")
colnames(raw_data)[1] <- "respondent"

3. 创建ID-姓名映射表

提取所有涉及的人员并分配唯一ID:

# 获取所有人员名单并按字母排序(与示例ID顺序匹配)
all_people <- c(colnames(raw_data)[-1], raw_data$respondent) %>%
  unique() %>%
  sort()

# 生成映射表
id_mapping <- data.frame(ID = 1:length(all_people), NAME = all_people)
print(id_mapping)

4. 构建邻接矩阵

将原始数据转换为长格式,匹配ID后填充到全0矩阵中:

# 转换为长格式:每行记录一个受访者对一个人的认识情况
long_data <- raw_data %>%
  pivot_longer(cols = -respondent, names_to = "person", values_to = "knows")

# 匹配受访者和被认识者的ID
long_data <- long_data %>%
  left_join(id_mapping, by = c("respondent" = "NAME")) %>%
  rename(respondent_id = ID) %>%
  left_join(id_mapping, by = c("person" = "NAME")) %>%
  rename(person_id = ID)

# 初始化全0邻接矩阵,设置行列名为ID
adj_matrix <- matrix(0, nrow = nrow(id_mapping), ncol = nrow(id_mapping))
rownames(adj_matrix) <- id_mapping$ID
colnames(adj_matrix) <- id_mapping$ID

# 填充矩阵数据
for (i in seq(nrow(long_data))) {
  adj_matrix[long_data$respondent_id[i], long_data$person_id[i]] <- long_data$knows[i]
}

# 查看最终邻接矩阵
print(adj_matrix)

5. 补充缺失数据(可选)

如果Excel中仅包含部分受访者数据(如示例中只有Jane和Pat),可手动补充其他人员的认识情况:

# 补充Abby认识Jane(ID1 → ID3)
adj_matrix[1, 3] <- 1
# 补充Mary认识Jane(ID4 → ID3)和Mary认识Pat(ID4 → ID5)
adj_matrix[4, 3] <- 1
adj_matrix[4, 5] <- 1

内容的提问来源于stack exchange,提问作者Kaitlin M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:57:45