【问题标题】:(R Igraph) Using affilliation to create subgraph from adjacency matrix(R Igraph) 使用从属关系从邻接矩阵创建子图
【发布时间】:2017-10-20 04:03:19
【问题描述】:

我需要根据从属关系数据选择的邻接矩阵创建一个子图。如何匹配邻接矩阵和从属矩阵?

取如下邻接矩阵:

    A   B   C   D   E   F   G
A   0   1   0   1   0   1   0
B   1   0   1   1   0   1   0
C   0   1   0   0   0   0   0
D   1   1   0   0   1   1   0
E   0   0   0   1   0   1   0
F   1   1   0   1   1   0   1
G   0   0   0   0   0   1   0

还有以下隶属矩阵:

    P   R   Q
A   1   1   0
B   1   0   1
C   1   1   0
D   0   1   0
E   1   0   1
F   0   0   1
G   1   1   0

如何从邻接矩阵创建子图,仅使用从属矩阵中与 P 对应的节点?

【问题讨论】:

    标签: r matrix igraph


    【解决方案1】:

    如果您的目标是:

    • 从您的邻接矩阵中过滤掉关联矩阵中对应的P1 的节点
    • 将过滤后的邻接矩阵转换为igraph 对象

    那么您可以通过以下方式完成:

    # the names(which()) isn't needed for the subset of adj
    p_nodes <- names(which(aff[,"P"] == 1))
    p_adj   <- adj[p_nodes, p_nodes]
    
    p_graph <- igraph::graph.adjacency(p_graph)
    

    【讨论】:

    • 亚当,这些代码适用于原始问题中的小测试矩阵,但不适用于我的 867 个节点的大型实矩阵。我得到的错误是“adj [P_nodes, P_nodes] 中的错误:下标越界”。你知道可能是什么问题吗?大型矩阵本身就可以很好地工作,但无法将它们组合起来。
    • 当您引用不存在的索引时会出现该错误(即x &lt;- matrix(1:4, nrow=2); colnames(x) &lt;- c("a","b"); x[,"c"]matrix(1:4, nrow=2)[3,3]。仔细检查P_nodes 的任何定义在adj 的上下文中是否有意义
    • 嗨,亚当,感谢您的回复。我将节点的名称更改为“name1”、“name2”、...“name867”,但保留了其他矩阵不变——代码现在可以工作了。这意味着问题不在于索引不存在。任何线索可能是什么问题?干杯。
    • 很高兴你能成功。如果您想更多地跟进您的错误,您可以看到这个SO discussion,但是如果没有您的数据,就很难猜测是什么导致了您的案例中的错误
    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多