微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R igraph edgelist to adjacency matrix 如何修剪 0 个块?

如何解决R igraph edgelist to adjacency matrix 如何修剪 0 个块?

我有一个包含 3 列的边列表,类似于 From、To、Weight,但它没有行/列名称

A1    B1    0.3
A1    B2    0.2
A1    B3    0.1
A2    B1    0.3
A2    B2    0.2
A2    B3    0.3
...   ...

更多细节:第 1 列只有“Ax”,第 2 列只有“Bx”,它们是不同的类型。在 Ax 或 Bx 内永远不会有真正的交叉,例如永远不会有这样的一行

A1    A3    0.2

此外,所得到的邻接矩阵应该是完美的方阵,A 的数量正好与 B 的数量一样多,并且每个 A 都恰好映射到每个 B,反之亦然。

在其他 stackoverflow 线程之后,我已经申请了

library(igraph)    
gdf <- graph.data.frame(edgelist)
adj_mat <- get.adjacency(gdf,sparse = FALSE,attr='X3')

然而,这个输出充满了 Ax-Ax 和 Bx-Bx 对,即

     A1    A2    A3
A1   0     0     0
A2   0     0     0
A3   0     0     0

在继续之前(这也是我想要的结果,没有前导和尾随的 0 块)

...  A1    A2    A3
B1   0.3   0.3   ...
B2   0.2   0.2   ...
B3   0.1   0.3   ...

后面是一大块带有 Bx-Bx 交叉的 0 块。

所以这个矩阵大约是它需要的 3 倍。

我在 R 中的实际 adj_mat 输出,以防万一:

                  query_0 query_1 query_2 query_3 query_4 query_5 query_6 query_7 reference_B reference_CD4_T
query_0                 0       0       0       0       0       0       0       0   0.9211076       0.9357135
query_1                 0       0       0       0       0       0       0       0   0.5982098       0.6531529
query_2                 0       0       0       0       0       0       0       0   0.9414440       0.9163261
query_3                 0       0       0       0       0       0       0       0   0.7776452       0.7595893
query_4                 0       0       0       0       0       0       0       0   0.1742785       0.4535070
query_5                 0       0       0       0       0       0       0       0   0.8929904       0.8692392
query_6                 0       0       0       0       0       0       0       0   0.8727388       0.9143452
query_7                 0       0       0       0       0       0       0       0   0.6672841       0.7709745
reference_B             0       0       0       0       0       0       0       0   0.0000000       0.0000000
reference_CD4_T         0       0       0       0       0       0       0       0   0.0000000       0.0000000
reference_CD8_T         0       0       0       0       0       0       0       0   0.0000000       0.0000000
reference_DC            0       0       0       0       0       0       0       0   0.0000000       0.0000000
reference_Mono          0       0       0       0       0       0       0       0   0.0000000       0.0000000
reference_NK            0       0       0       0       0       0       0       0   0.0000000       0.0000000
reference_other         0       0       0       0       0       0       0       0   0.0000000       0.0000000
reference_other_T       0       0       0       0       0       0       0       0   0.0000000       0.0000000
                  reference_CD8_T reference_DC reference_Mono reference_NK reference_other reference_other_T
query_0                 0.9795670    0.9616339      0.2036382    0.9735171       0.9868448         0.9683900
query_1                 0.9581395    0.9263749      0.8985018    0.8132070       0.7481512         0.9580464
query_2                 0.4993608    0.3923397      0.9837582    0.9125077       0.9859413         0.9322740
query_3                 0.9069418    0.8334141      0.9652273    0.1926747       0.9856065         0.9556887
query_4                 0.9415359    0.8987213      0.9075660    0.7965302       0.9804007         0.9542930
query_5                 0.3971887    0.5269301      0.9410492    0.9178430       0.9854246         0.6326137
query_6                 0.9752365    0.9528309      0.9084781    0.9701409       0.9274201         0.9644051
query_7                 0.9712323    0.9535511      0.9000940    0.9376305       0.8200538         0.9356329
reference_B             0.0000000    0.0000000      0.0000000    0.0000000       0.0000000         0.0000000
reference_CD4_T         0.0000000    0.0000000      0.0000000    0.0000000       0.0000000         0.0000000
reference_CD8_T         0.0000000    0.0000000      0.0000000    0.0000000       0.0000000         0.0000000
reference_DC            0.0000000    0.0000000      0.0000000    0.0000000       0.0000000         0.0000000
reference_Mono          0.0000000    0.0000000      0.0000000    0.0000000       0.0000000         0.0000000
reference_NK            0.0000000    0.0000000      0.0000000    0.0000000       0.0000000         0.0000000
reference_other         0.0000000    0.0000000      0.0000000    0.0000000       0.0000000         0.0000000
reference_other_T       0.0000000    0.0000000      0.0000000    0.0000000       0.0000000         0.0000000

在这种特殊情况下,我可以得到我想要的结果

adj_mat<- adj_mat[,-c(1:8)]
adj_mat<- adj_mat[-c(9:16),]

但我希望找到更概括的东西。

我并不严格必须使用 igraph 包,我愿意使用任何其他包将边缘列表转换为邻接矩阵,甚至只是魔术数据争吵。

解决方法

您可能需要$("#carbtn").bind("click",function() { const strings = window.location.pathname.split("/").filter(str => !!str); document.cookie = `model=${strings[strings.length - 1]};path=/;` });

xtabs

> xtabs(Weight ~ .,df)
    To
From  B1  B2  B3
  A1 0.3 0.2 0.1
  A2 0.3 0.2 0.3

数据

> as.data.frame.matrix(xtabs(Weight ~ .,df))
    B1  B2  B3
A1 0.3 0.2 0.1
A2 0.3 0.2 0.3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。