想象一下,我有一个作者的整体列表
Authors <- c("Abel","Babel","Cain","Devil","Esau")
用它构建一个整体邻接矩阵,用零初始化
allAuthors <- matrix(0L,nrow=length(Authors),ncol=length(Authors),dimnames=list(Authors,Authors))
现在我在这三个人合作的论文上磕磕绊绊
paperAuthors <- c("Babel","Cain","Devil")
并构建他们合作的另一个邻接矩阵,用所有1来初始化
coAuth <- matrix(1L,nrow=length(paperAuthors),ncol=length(paperAuthors),dimnames=list(paperAuthors,paperAuthors))
如何将coAuth矩阵单元格值汇总到相应的allAuthors中 使用行和列名称作为索引的矩阵单元?
换句话说,我想在paperAuthors作者的交叉点获得allAuthors矩阵的单元格,而其他所有矩阵的单元格都是0。
答案 0 :(得分:0)
子集可以满足您的需求,还是需要定义新的矩阵求和运算?
allAuthors[paperAuthors, paperAuthors] <-
allAuthors[paperAuthors, paperAuthors] + 1
allAuthors
答案 1 :(得分:0)
首先,我们在coAuth
矩阵中获取索引。
ind <- which(coAuth == 1, arr.ind = TRUE)
现在我们必须在allAuthors
矩阵中找到相应的索引。
ind.allAuthors <- cbind(
match(rownames(coAuth), rownames(allAuthors))[ind[, 'row']],
match(colnames(coAuth), colnames(allAuthors))[ind[, 'col']])
现在我们可以对两个矩阵中的元素求和:
allAuthors[ind.allAuthors] <- allAuthors[ind.allAuthors] + 1