具有相同属性的矩阵节点转换为 igraph 中的矩阵
matrix node with same attribute transformation to matrix in igraph
我在 igraph 中有一个矩阵,如上图中的第一个。数字表示合作次数。我有一个属性,作为第二个。我想要一个代码,它可以自动给我 igraph 中的第三个矩阵或 R 中的其他矩阵。thx in adavnce。
非igraph
方法
您可以试试下面的代码(不需要igraph
)
> +((with(a, outer(type, type, `==`)) * mat) > 0)
A B C
A 0 0 1
B 0 0 0
C 1 0 0
igraph
接近
如果您仍然想使用 igraph
,一种可能的选择是
graph_from_adjacency_matrix(mat > 0, mode = "undirected") %>%
get.data.frame() %>%
filter(a[from, ] == a[to, ]) %>%
graph_from_data_frame(directed = FALSE, vertices = row.names(a)) %>%
get.adjacency(sparse = FALSE)
这给出了
A B C
A 0 0 1
B 0 0 0
C 1 0 0
数据
mat <- `dimnames<-`(
matrix(c(0, 2, 3, 2, 0, 1, 3, 1, 0), 3),
rep(list(LETTERS[1:3]), 2)
)
a <- `rownames<-`(data.frame(type = c("edu", "company", "edu")), LETTERS[1:3])
非igraph
方法
您可以试试下面的代码(不需要igraph
)
> +((with(a, outer(type, type, `==`)) * mat) > 0)
A B C
A 0 0 1
B 0 0 0
C 1 0 0
igraph
接近
如果您仍然想使用 igraph
,一种可能的选择是
graph_from_adjacency_matrix(mat > 0, mode = "undirected") %>%
get.data.frame() %>%
filter(a[from, ] == a[to, ]) %>%
graph_from_data_frame(directed = FALSE, vertices = row.names(a)) %>%
get.adjacency(sparse = FALSE)
这给出了
A B C
A 0 0 1
B 0 0 0
C 1 0 0
数据
mat <- `dimnames<-`(
matrix(c(0, 2, 3, 2, 0, 1, 3, 1, 0), 3),
rep(list(LETTERS[1:3]), 2)
)
a <- `rownames<-`(data.frame(type = c("edu", "company", "edu")), LETTERS[1:3])