【问题标题】:How would I expand a dataframe of variables to represent a network of interactions in R?我将如何扩展变量数据框以表示 R 中的交互网络?
【发布时间】:2021-09-19 18:22:58
【问题描述】:

我有一个家庭变量的“阳性”病例表。我想最终使用 R 在 iGraph 中输出一个网络图。我想将每个家庭表示为一个网络,因此代表每个家庭中积极和消极的人。我的输入数据框如下:

ID Result Household Number in household
A Positive H1 2
B Positive H1 2
C Positive H2 3
D Positive H3 2

我的第一个要求是将列表扩展到家庭中的变量数量,结果是:

ID Result Household Number in household
A Positive H1 2
B Positive H1 2
C Positive H2 3
C1 Negative H2 2
D Positive H3 3
D1 Negative H3 3
D2 Negative H3 3

从这一点开始,我需要一个代表网络边缘列表的数据框,即如果一个人与他们的家庭代表的另一个人进行交互(双向)。这看起来像:

ID Interaction Household
A B H1
B A H1
C C1 H2
C1 C H2
D D1 H3
D D2 H3
D1 D H3
D1 D2 H3
D2 D H3
D2 D1 H3

然后,此边缘列表将与正面和负面结果的“属性”列表一起输入,然后可用于构建网络。我只是在努力以正确的格式获取数据以开始!

我在 R 和堆栈溢出方面有点新手 - 我希望以上内容有意义并且很高兴澄清!

【问题讨论】:

  • 更新:结合使用 Excel(抱歉!)和 R 中的 rep 函数,我已经设法到达第二个数据帧,但我很难到达第三个数据帧。我已经探索过在 tidyverse 中使用 expand 函数,但收效甚微!
  • 我认为您不需要igraph 来解决这个问题。
  • 对不起 - 这纯粹是为了生成图形的输入文件。我正在使用 igraph 对网络进行一些很好的可视化

标签: r igraph network-analysis


【解决方案1】:

我认为您不需要igraph 来实现您的目标。下面是data.table 选项

> setDT(df)[, CJ(ID, Interaction = ID), Household][ID != Interaction, c(2, 3, 1)]       
    ID Interaction Household
 1:  A           B        H1
 2:  B           A        H1
 3:  C          C1        H2
 4: C1           C        H2
 5:  D          D1        H3
 6:  D          D2        H3
 7: D1           D        H3
 8: D1          D2        H3
 9: D2           D        H3
10: D2          D1        H3

【讨论】:

    猜你喜欢
    • 2011-01-06
    • 2018-12-24
    • 1970-01-01
    • 2020-06-11
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多