获取包含alter的alters的边缘列表

时间:2019-09-24 16:05:08

标签: r dplyr igraph data-manipulation edge-list

我需要一个包含三列的数据框:i,j(更改)和k(j的更改)。我有一个邻接矩阵(下面的示例)。从那里我可以得到一个图形对象并提取边缘列表。如何处理数据以获得类似下面的WANT数据框的输出?

有(矩阵和边列表):

      1   2   3   4   5   

 1    0   0   0   1   0  
 2    0   0   1   1   1   
 3    0   0   0   0   0   
 4    1   1   0   0   1   
 5    1   1   0   1   0    


g <- graph_from_adjacency_matrix(mat)

get.edgelist(g)


i   j

1   4
2   3
2   4
2   5
4   1
4   2
4   5
5   1
5   2
5   4

WANT(ijk边缘列表):

i j k
1 4 2
1 4 5
2 4 1
2 4 5
4 2 3
4 5 1
4 5 2
5 1 4 
5 2 3
5 2 4
5 4 1
5 4 2

ijk边缘列表应使所有可能的三倍与ij匹配,不包括自我循环(例如:1 4 1)

2 个答案:

答案 0 :(得分:1)

我实际上能够使用igraph和dplyr来做到这一点:

console.log

答案 1 :(得分:1)

数据:

input-group

库:

<div class="input-group">
  <input type="text" class="form-control" aria-label="Amount (rounded to the nearest dollar)" style="width: 40px; float: right;">
  <span class="input-group-addon">Qty.</span>
  <span class="input-group-btn">
    <button aria-label="Add" name="inWarenkorb" type="submit" value="Add" class="submit btn btn-primary" style="width:100%">
      <span>Add to basket</span>
    </button>
    </span>
</div>

解决方案:

as.matrix(read.table(text = "0   0   0   1   0  
                             0   0   1   1   1   
                             0   0   0   0   0   
                             1   1   0   0   1   
                             1   1   0   1   0",
                     header = F, stringsAsFactors = F)) -> m1

dimnames(m1) <- list(1:5, 1:5)

输出:

library(igraph) 
library(dplyr)
library(tidyr)
library(magrittr)