在RStudio中构建引文网络的数据框与映射矩阵的技术问题
解决R中基于文献列表构建引用矩阵的问题
嘿,我来帮你搞定这个矩阵构建的问题!看起来你已经搭好了空矩阵的架子,接下来就是给它填上正确的引用关系、设置好行名列名对吧?下面一步步来:
1. 先给矩阵挂上行名和列名
假设你的原始文献列表叫original_papers,引用文献列表叫cited_papers,空矩阵是citation_matrix(你说的50×1497那个),先把行名、列名对应上:
# 把原始文献设为行名 rownames(citation_matrix) <- original_papers # 把引用文献设为列名 colnames(citation_matrix) <- cited_papers
2. 填充引用关系(核心步骤)
这里默认你有一个对应关系的列表,比如citation_list——其中citation_list[[i]]就是第i篇原始文献引用的所有文献的向量。如果是这样的话,有两种常用方法:
方法A:循环填充(新手友好,逻辑清晰)
如果数据量不大,用循环完全没问题,每一步都看得懂:
# 遍历每一篇原始文献 for (i in 1:length(original_papers)) { # 找到当前原始文献的引用文献在列名中的位置 cited_pos <- match(citation_list[[i]], colnames(citation_matrix)) # 把这些位置设为1(代表该原始文献引用了这篇文献,要是需要计数就改成+1) citation_matrix[i, cited_pos] <- 1 }
方法B:向量化/稀疏矩阵(高效省内存,适合大数据)
如果你的矩阵大部分是0(引用关系通常都是这样),用稀疏矩阵能省超多内存,而且速度更快:
# 先装Matrix包(没装的话先跑下面这句) # install.packages("Matrix") library(Matrix) # 生成行索引:每个原始文献重复对应引用文献的次数 row_idx <- rep(1:length(original_papers), sapply(citation_list, length)) # 生成列索引:把所有引用文献对应到列名的位置 col_idx <- unlist(lapply(citation_list, function(x) match(x, cited_papers))) # 创建稀疏矩阵,直接带上行名列名 citation_matrix <- sparseMatrix( i = row_idx, j = col_idx, dims = c(50, 1497), # 对应你的矩阵维度 dimnames = list(original_papers, cited_papers), x = 1 # 填充的值,这里是1代表存在引用 ) # 如果一定要转成普通矩阵,用这句 citation_matrix <- as.matrix(citation_matrix)
重要提示!
- 一定要确保
citation_list里的文献名称和cited_papers完全一致!不然match会返回NA,导致填充失败。可以先检查:
# 检查所有引用文献是否都在列名列表里 all(unlist(citation_list) %in% cited_papers)
要是返回FALSE,得先清洗数据,统一文献的名称格式(比如去掉空格、统一大小写、规范DOI格式之类的)。
- 如果你之前的空矩阵是用
matrix(0, nrow=50, ncol=1497)创建的,初始值是0,填1刚好能区分“引用/未引用”,非常合适。
内容的提问来源于stack exchange,提问作者Joseph Bosse
相关产品推荐
相关产品推荐

