首页 文章

adjacency数组在sna包中执行mrqap测试

提问于
浏览
1

如何在 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

我需要几个矩阵与阵列格式相同数量的节点,像这样(但在adyacency矩阵格式):

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

1 回答

  • 0

    我知道这是一个老问题,但如果您仍想执行问题中要求的分解:

    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
    

    从那以后,您应该能够根据需要转换列表的每个元素(转换为图形,模拟边缘等) .

相关问题