如何用R语言构建卡片编码共现关联矩阵?
R语言实现卡片共现统计与关联矩阵生成
1. 数据读取与预处理
假设你的CSV文件中,每一列对应一组卡片编码,空值代表该组不含对应卡片。先读取数据:
# 加载tidyverse工具包(若未安装先运行install.packages("tidyverse")) library(tidyverse) # 读取CSV,无列名时设header=FALSE,空值用na.strings识别 df <- read.csv("你的文件路径.csv", header = FALSE, na.strings = c("", "NA"))
将每一列转为非空编码的列表,便于后续处理:
# 提取每一列的非空编码,组成分组列表 groups <- apply(df, 2, function(col) na.omit(col))
2. 统计编码共现次数
先整理所有唯一编码,再初始化共现矩阵并填充数据:
# 获取所有编码并按顺序排序 all_codes <- sort(unique(unlist(groups))) # 创建空的共现矩阵,行/列名设为编码 cooccur_matrix <- matrix(0, nrow = length(all_codes), ncol = length(all_codes), dimnames = list(all_codes, all_codes)) # 遍历每个分组,更新共现次数 for (group in groups) { # 生成当前分组内所有编码的两两组合 pairs <- expand.grid(group, group, stringsAsFactors = FALSE) # 对每一对编码,共现次数+1 for (i in 1:nrow(pairs)) { cooccur_matrix[pairs[i,1], pairs[i,2]] <- cooccur_matrix[pairs[i,1], pairs[i,2]] + 1 } }
3. 转换为百分比关联矩阵
总列数为643,将共现次数转换为占比百分比:
# 计算百分比,保留两位小数 percent_matrix <- round((cooccur_matrix / 643) * 100, 2)
4. 可选:导出结果到CSV
若需保存结果到本地文件:
write.csv(percent_matrix, "卡片共现百分比矩阵.csv", row.names = TRUE)
新手注意事项
- 确保文件路径正确,若CSV与R脚本在同一文件夹,直接写文件名即可
- 若CSV有列名,将
header=FALSE改为header=TRUE,并可通过df[, -1]去掉列名列再生成groups - 上述代码针对43个编码、643列的规模完全适用,无需担心性能问题
内容的提问来源于stack exchange,提问作者Alex Fewings
相关产品推荐
相关产品推荐

