如何通过行/列名称将矩阵单元格值相加到另一个?

时间:2017-11-12 11:32:02

标签: r matrix

想象一下,我有一个作者的整体列表

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。

非常感谢

2 个答案:

答案 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