首页 文章

r从邻接列表创建邻接矩阵或边缘列表

提问于
浏览
1

我有一个邻接列表,我试图使其成为邻接矩阵或边缘列表 . 这是为了在从邻接矩阵或边缘列表构建的网络上进行网络分析 . 我正在使用R.邻接列表的示例如下(每行有不同的条目数,空条目为NA):

[17,50,90,NA,NA;
80,67,NA,NA,NA;
33,31,32, NA,NA;
33,31,32,NA,NA;
354,56,87,97,32;
....]

我尝试使用R: Adjacency list to Adjacency matrix但这仅在我的邻接列表有两个条目(即组中有两个以上的邻居)时才有效 . 我得到了一个边缘列表,但只考虑了我列表中的前两个条目 .

我也尝试使用From list to adjacency matrix但使用 igraphmake_graph(unlist(mydata)) 导致错误: "At type_indexededgelist.c:117 : cannot create empty graph with negative number of vertices, Invalid value"

我需要一个邻接矩阵,它考虑了网络中的权重(如果条目31和32是两行,那么它们的边权重将是2) . 感谢您的任何帮助 .

1 回答

  • 0

    我有一个邻接列表,我试图把它变成一个边缘列表 .

    也许你能做到

    lst <- read.csv(header=F, comment.char=";", colClasses="integer", text="
    17,50,90,NA,NA;
    80,67,NA,NA,NA;
    33,31,32,NA,NA;
    33,31,32,NA,NA;
    354,56,87,97,32;")
    m <- as.matrix(lst)
    e <- stack(split(m, row(m)))[,2:1]
    (e <- e[complete.cases(e),])
    # 1    1     17
    # 2    1     50
    # 3    1     90
    # 6    2     80
    # 7    2     67
    # 11   3     33
    # 12   3     31
    # 13   3     32
    # 16   4     33
    # 17   4     31
    # 18   4     32
    # 21   5    354
    # 22   5     56
    # 23   5     87
    # 24   5     97
    # 25   5     32
    

    要么

    e <- apply(lst, 1, function(x)x[!is.na(x)])
    (e <- do.call(rbind, lapply(e, embed, 2))[,2:1])
    #      [,1] [,2]
    # [1,]   17   50
    # [2,]   50   90
    # [3,]   80   67
    # [4,]   33   31
    # [5,]   31   32
    # [6,]   33   31
    # [7,]   31   32
    # [8,]  354   56
    # [9,]   56   87
    # [10,]   87   97
    # [11,]   97   32
    

    取决于您需要什么/您的“邻接列表”代表什么 .

相关问题