r - 使用组信息制作邻接矩阵
问题描述
我对 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 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 和村中,则它们被视为相邻。
使用 Note 中的输入为组、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)
给予:
> 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)
推荐阅读
- python - 来自一维张量的 Pytorch CrossEntropyLoss
- next.js - Nextjs & Apollo:在 getInitialProps 服务器端将 cookie 附加到 Apollo 客户端
- java - Issues authenticating a post request with a certificate and private key in Kotlin / Java
- html - List-item fixed width not working properly
- c# - Console.Write() without delay / lag
- python - 为聚合创建临时列
- python - Python cursor how do I replace with a string and maintain quotation marks in a SQL que?y
- mysql - Using MongoDB and Relational DB together
- android - Textview not showing anything from JSON Object
- java - 如何正确获取实体相关对象