【发布时间】:2019-09-08 04:06:51
【问题描述】:
按照this question,是否可以连接两个邻接矩阵,并保留新行和新列的值?
以参考中的示例为基础,mat1 和 mat2 的联合使用 0 初始化新添加的行和列中的值。我想用邻接矩阵中的值初始化它们,并保留该信息。
> mat1
Tommy Roy Addy Sam
Tommy 0 1 0 -1
Roy -1 -1 1 0
Addy 1 0 -1 0
Sam 0 0 -1 1
> mat2
Mike Roy Addy Sam Dan
Mike 0 1 0 -1 0
Roy -1 -1 1 0 1
Addy 1 0 -1 0 -1
Sam 0 0 -1 1 0
Dan 1 0 0 -1 1
complete_matrix <- function(mat, ref) {
dif <- setdiff(rownames(ref), rownames(mat))
mat <- rbind(mat, matrix(0, length(dif), ncol(mat), dimnames = list(dif, NULL)))
mat <- cbind(mat, matrix(0, nrow(mat), length(dif), dimnames = list(NULL, dif)))
return(mat)
}
> complete_matrix(mat2, mat1)
Mike Roy Addy Sam Dan Tommy
Mike 0 1 0 -1 0 0
Roy -1 -1 1 0 1 0
Addy 1 0 -1 0 -1 0
Sam 0 0 -1 1 0 0
Dan 1 0 0 -1 1 0
Tommy 0 0 0 0 0 0
例如,我希望 complete_matrix(mat2, mat1) 产生以下结果(观察 Tommy 行和列):
Mike Roy Addy Sam Dan Tommy
Mike 0 1 0 -1 0 0
Roy -1 -1 1 0 1 1
Addy 1 0 -1 0 -1 0
Sam 0 0 -1 1 0 -1
Dan 1 0 0 -1 1 0
Tommy 0 1 0 -1 0 0
dput 为 c&P:
mat1 <- structure(c(0L, -1L, 1L, 0L, 1L, -1L, 0L, 0L, 0L, 1L, -1L, -1L,
-1L, 0L, 0L, 1L), .Dim = c(4L, 4L), .Dimnames = list(c("Tommy",
"Roy", "Addy", "Sam"), c("Tommy", "Roy", "Addy", "Sam")))
mat2 <- structure(c(0L, -1L, 1L, 0L, 1L, 1L, -1L, 0L, 0L, 0L, 0L, 1L,
-1L, -1L, 0L, -1L, 0L, 0L, 1L, -1L, 0L, 1L, -1L, 0L, 1L), .Dim = c(5L,
5L), .Dimnames = list(c("Mike", "Roy", "Addy", "Sam", "Dan"),
c("Mike", "Roy", "Addy", "Sam", "Dan")))
【问题讨论】:
-
如果存在差异,您希望发生什么?例如,
mat1中的 Addy/Sam 值为 1,mat2中的值为 0? (或者我们可以假设没有差异?) -
@Gregor,这是一个很好的问题。就我的目的而言,永远不会有差异。这是一个巨大的邻接矩阵计算的小代表,我将它分成可管理的部分,然后连接成一个巨大的稀疏矩阵。
标签: r matrix adjacency-matrix