R 利用群信息生成邻接矩阵
我对R比较陌生,在使用组特征创建邻接矩阵时遇到问题 我有一个如下所示的数据框:R 利用群信息生成邻接矩阵,r,igraph,adjacency-matrix,adjacency-list,R,Igraph,Adjacency Matrix,Adjacency List,我对R比较陌生,在使用组特征创建邻接矩阵时遇到问题 我有一个如下所示的数据框: distid villageid hhid group1 group2 group3 group4 1 1 111 0 1 0 0 1 1 112 1 1 1 0 1 2 121 1 1 0 1 1
distid villageid hhid group1 group2 group3 group4
1 1 111 0 1 0 0
1 1 112 1 1 1 0
1 2 121 1 1 0 1
1 2 122 1 0 0 1
2 1 211 1 1 0 0
2 1 212 1 1 1 1
2 2 221 0 0 1 0
2 2 222 0 1 1 0
我需要创建一个邻接矩阵,如果hhid在同一个distid、villageid和group中,那么它们都是完全连接的
所以我的最终矩阵应该是这样的
hhid 111 112 121 122 211 212 221 222
111 0 1 0 0 0 0 0 0
112 1 0 0 0 0 0 0 0
121 0 0 0 1 0 0 0 0
122 0 0 0 0 0 0 0 0
211 0 0 0 0 0 1 0 0
212 0 0 0 0 1 0 0 0
221 0 0 0 0 0 0 0 1
222 0 0 0 0 0 0 1 0
我们假设所需要的是,如果两个元素在同一个组中,dist和village,则它们被视为相邻的 使用注释中的输入创建组、distid和villageid的邻接矩阵,然后将它们相乘并将对角线归零
m1 <- sign(crossprod(t(DF[-(1:3)])))
m2 <- +outer(DF$distid, DF$distid, "==")
m3 <- +outer(DF$villageid, DF$villageid, "==")
m4 <- 1 - diag(nrow(DF))
m <- m1 * m2 * m3 * m4
dimnames(m) <- list(DF$hhid, DF$hhid)
图表
库(igraph)
g“第一组在地区一级”意味着什么?所示的邻接矩阵是不对称的。请澄清并修正问题。我已编辑了问题。我需要创建一个邻接矩阵,如果hhid在同一个distid中,villageid具有相同的从属关系,那么它是连接的。谢谢,这非常有效。我有一个关于尺寸的问题。当使用(t(DF[4:7])时,我得到7是数据帧中变量的数量,但为什么使用4作为行。是组数吗?t(DF[4:7])
是4x8矩阵,而不是数据帧。如果我们称之为M
,那么crossprod(M[,i],M[,j])
是DF
的第i行和第j行中hhid的共同组数。例如,对于i=2和j=3,它给出了2,因为DF的第2行和第3行中的hhid有两个共同的组(组1和组2)。感谢您的解释。对此我还是有点不确定。我的完整数据集有247个hhid和15个组。那么我的矩阵应该是t(DF[4:14])吗?m1仅从组列中导出。我已经更改了索引以排除前三列,因此如果您有不同数量的组列,只要组列是除前三列以外的所有列,就不需要更改它。
> m
111 112 121 122 211 212 221 222
111 0 1 0 0 0 0 0 0
112 1 0 0 0 0 0 0 0
121 0 0 0 1 0 0 0 0
122 0 0 1 0 0 0 0 0
211 0 0 0 0 0 1 0 0
212 0 0 0 0 1 0 0 0
221 0 0 0 0 0 0 0 1
222 0 0 0 0 0 0 1 0
library(igraph)
g <- graph_from_adjacency_matrix(m)
plot(g)
Lines <- "distid villageid hhid group1 group2 group3 group4
1 1 111 0 1 0 0
1 1 112 1 1 1 0
1 2 121 1 1 0 1
1 2 122 1 0 0 1
2 1 211 1 1 0 0
2 1 212 1 1 1 1
2 2 221 0 0 1 0
2 2 222 0 1 1 0"
DF <- read.table(text = Lines, header = TRUE)