如何让邻接阵列在sna包中执行mrqap测试?我有一个加权的多网络(两个无向网络和一个有向网络),在具有属性的边缘列表中,如下所示:
source target terr type weight
1010 1007 1 3 1
1011 1303 1 2 1
1014 1048 1 4 2
1014 1138 1 4 3我需要几个具有相同节点数的数组格式的矩阵,类似于这样(但以不同的矩阵格式):
type 2
source target weight
1010 1007 0
1011 1303 1
1014 1048 0
1014 1138 0
type 3
source target weight
1010 1007 1
1011 1303 0
1014 1048 0
1014 1138 0
type 4
source target weight
1010 1007 0
1011 1303 0
1014 1048 2
1014 1138 3我试过的一个脚本是:
el=read.csv("S_EDGES.csv", header = TRUE, sep = ",") # edgelist
Nodos=read.csv("S_NODES.csv", header = TRUE, sep = ",")
el$type[el$type==2] <- 1 # un solo vínculo de infraestructura
library(igraph)
G=graph.data.frame(el, Nodos, directed=F)
subv = (Nodos$id (Nodos$terr_name=="ART") # this fail and then also "neighverts" and "g3"
SG = decompose.graph(G,mode="weak") # because different territories are in fact different networks
neighverts = unique(unlist(sapply(SG,FUN=function(s){if(any(V(s)$name %in% subv)) V(s)$name else NULL})))
g3 = induced.subgraph(graph=G,vids=neighverts)
# or:
AM=get.adjacency(G, type=c("both"), attr=NULL, names=TRUE, sparse=FALSE) # doesn't distinguish the types of links in different matrices发布于 2017-01-03 10:28:40
我知道这是一个老问题,但如果您仍然想执行问题中要求的分解:
library(dplyr)
# your example rows
d <- read.table(header = TRUE,
text = "source target terr type weight
1010 1007 1 3 1
1011 1303 1 2 1
1014 1048 1 4 2
1014 1138 1 4 3") %>%
select(-terr)
# the transformation
lapply(unique(d$type), function(x) {
mutate(d, weight = ifelse(type == x, weight, 0)) %>%
select(-type)
}) %>%
setNames(unique(d$type))代码将返回您所请求的内容:
$`3`
source target weight
1 1010 1007 1
2 1011 1303 0
3 1014 1048 0
4 1014 1138 0
$`2`
source target weight
1 1010 1007 0
2 1011 1303 1
3 1014 1048 0
4 1014 1138 0
$`4`
source target weight
1 1010 1007 0
2 1011 1303 0
3 1014 1048 2
4 1014 1138 3从那时起,您应该能够按照自己的意愿转换列表中的每个元素(转换为图形、对边建模等)。
https://stackoverflow.com/questions/36365155
复制相似问题