有R函数可以用igraph重构数据进行网络分析吗?

问题描述 投票:0回答:1

我想根据患者数据对合并症进行网络分析,以便我可以以图形方式查看哪些疾病是相关的(我在下面将疾病命名为 com1 - com4)。

我有一个像这样的数据结构,其中每种合并症/疾病都用“1”表示。 ID 为 001 的患者患有合并症 com1 和 com2,这应该为我提供 com1 和 com2 之间的联系,而对于患者 002,则没有联系,因为只存在一种疾病,依此类推。因此,一些患者不会为网络做出贡献,而另一些患者则会通过多个连接做出贡献。

我认为可能有专门的函数来实现这一点,或者如果没有,我认为 for 循环可以以某种方式做到这一点。

我有这样的数据:

表1:

id com1 com2 com3 com4
001 1 1 0 0
002 0 1 0 0
003 0 0 1 0
004 1 0 1 0
005 1 1 1 0
006 0 0 1 1

我正在寻找类似的东西,以便我在每个连接的新数据框中得到一个新行:

表2:

节点1 节点2
com1 com2
com1 com3
com1 com2
com1 com2
com1 com3
com3 com4

作为第二步,根据表2,我希望能够计算连接/边的数量。请注意,链接中没有方向,即 com1-com2 和 com2-com1 之间没有区别,这就是为什么 com2-com1 不在下表中的原因:

表3:

连接 n
com1-com2 2
com1-com3 2
com1-com4 0
com2-com3 1
com2-com4 0
com3-com4 1

任何帮助将不胜感激!

亲切的问候, 雅各布

在stackoverflow和其他地方搜索解决方案,没有找到任何

r networking igraph
1个回答
0
投票

你可以尝试

crossprod
如下

m <- crossprod(as.matrix(df[-1]))
data.frame(
    connection = combn(row.names(m), 2, paste0, collapse = "-"),
    n = m[lower.tri(m)]
)

这给出了

  connection n
1  com1-com2 2
2  com1-com3 2
3  com1-com4 0
4  com2-com3 1
5  com2-com4 0
6  com3-com4 1

数据

df <- read.table(
    text = "id  com1    com2    com3    com4
001 1   1   0   0
002 0   1   0   0
003 0   0   1   0
004 1   0   1   0
005 1   1   1   0
006 0   0   1   1",
    header = TRUE,
    check.names = FALSE
)
© www.soinside.com 2019 - 2024. All rights reserved.