一个边缘列表R的多个邻接矩阵

时间:2017-02-03 16:21:39

标签: r adjacency-list adjacency-matrix

我有以下边select * from users where name like '%Frank%' ,其边数与路径编号相关联。这是由以下list给出的,我称之为 Totallist : `

matrix

我想为每条路径构建邻接Begin edge end edge path number 1 3 1 3 4 1 4 5 1 6 3 2 3 2 2` 。在这个例子中,我想要两个matrices,但可能会有更多。我写了以下内容但它只找到第一条路径的matrices。我不确定如何编写适合我投入的任何路径的东西:

matrix

我还需要 X<-as.data.frame(table(Totallist[,3])) nlines<-nrow(X) nlines freq<-X[1,2] diameterofmatrix<-max(Totallist) X1<-get.adjacency(graph.edgelist(as.matrix(Totallist[1:X[1,2],1:2]), directed=FALSE)) X1<-rbind(X1, 0) X1<-cbind(X1, 0) X1 所有都是相同的维度,这就是为什么我添加了一个额外的行和列。我可以继续使用我的方法,但它似乎很难看。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

要将邻接矩阵提取到列表中,您可以执行以下操作(我生成一些虚假数据):

set.seed(42)
df <- data.frame(beginEdge = sample(1:10, 10, replace = TRUE), 
                 endEdge = sample(1:10, 10, replace=TRUE), 
                 pathNum = rep(c(1,2), each=5))
df

      beginEdge endEdge pathNum
1         10       5       1
2         10       8       1
3          3      10       1
4          9       3       1
5          7       5       1
6          6      10       2
7          8      10       2
8          2       2       2
9          7       5       2
10         8       6       2


paths <- unique(df$pathNum) # get the paths to iterate through

如果我们制作节点因子,并将因子的级别设置为总体中的所有节点,则将为网络中的总体计算邻接矩阵。我在这里假设网络是十个演员。如果您观察到的数据包含您要使用的所有节点,则将级别设置为unique(c(df$beginEdge,df$endEdge)),或者您喜欢的任何节点集。

df$beginEdge <- factor(df$beginEdge, levels=1:10) 
df$endEdge <- factor(df$endEdge, levels=1:10)

我们现在浏览路径列表并创建将它们存储为列表的矩阵:

  list.of.adj.mats <- lapply(paths, function(i){
      matrix(as.numeric((
      table(df$beginEdge[df$pathNum==i],
        df$endEdge[df$pathNum==i])+
      table(df$endEdge[df$pathNum==i],
      df$beginEdge[df$pathNum==i]))>0), 
  nrow=length(levels(df$beginEdge)))})
list.of.adj.mats
[[1]]
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    0    0    0    0    0    0    0    0    0     0
 [2,]    0    0    0    0    0    0    0    0    0     0
 [3,]    0    0    0    0    0    0    0    0    1     1
 [4,]    0    0    0    0    0    0    0    0    0     0
 [5,]    0    0    0    0    0    0    1    0    0     1
 [6,]    0    0    0    0    0    0    0    0    0     0
 [7,]    0    0    0    0    1    0    0    0    0     0
 [8,]    0    0    0    0    0    0    0    0    0     1
 [9,]    0    0    1    0    0    0    0    0    0     0
[10,]    0    0    1    0    1    0    0    1    0     0

[[2]]
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    0    0    0    0    0    0    0    0    0     0
 [2,]    0    1    0    0    0    0    0    0    0     0
 [3,]    0    0    0    0    0    0    0    0    0     0
 [4,]    0    0    0    0    0    0    0    0    0     0
 [5,]    0    0    0    0    0    0    1    0    0     0
 [6,]    0    0    0    0    0    0    0    1    0     1
 [7,]    0    0    0    0    1    0    0    0    0     0
 [8,]    0    0    0    0    0    1    0    0    0     1
 [9,]    0    0    0    0    0    0    0    0    0     0
[10,]    0    0    0    0    0    1    0    1    0     0