【问题标题】:for-loop or apply function on multiple subgraphsfor-loop 或在多个子图上应用函数
【发布时间】:2021-06-24 13:00:21
【问题描述】:

这是此帖子Calculation based on list elements 的后续问题。您可以在此处Node links across modules with graph and dataframe 找到图形g 和数据框modules 的可重现示例。从g,我创建了一个子图m1,其中包含给定模块中的节点及其边缘数据,例如:

m1 <- as_tbl_graph(g) %>% 
  activate(nodes) %>% 
  filter(module == 1)

m1
# A tbl_graph: 37 nodes and 93 edges
#
# An undirected simple graph with 1 component
#
# Node Data: 37 x 2 (active)
  name                             module
  <chr>                             <int>
1 Antigua and Barbuda                   1
2 Aruba                                 1
3 Australia                             1
4 Barbados                              1
5 Belize                                1
6 Bolivia (Plurinational State of)      1
# ... with 31 more rows
#
# Edge Data: 93 x 2
   from    to
  <int> <int>
1     1     7
2     4     7
3     6     8
# ... with 90 more rows
> 

我想编写一个 for 循环或应用函数来计算所有模块的以下计算。

m1 <- as_tbl_graph(g) %>% 
  activate(nodes) %>% 
  filter(module == 1)

nodedeg <- as.data.frame(degree(m1))
meandeg <- mean(nodedeg$`degree(m1)`)
sd <- sd(nodedeg$`degree(m1)`)

z <- (nodedeg-meandeg)/sd

我的预期输出是每个国家/地区都有 z 值的数据框。

【问题讨论】:

  • @ThomasIsCoding 抱歉,请参阅我更新后的帖子中的编辑。
  • 模块数据框应该加入到图形数据中?如果所需的所有数据都在一个地方(理想情况下一个对象已经合并在一起),那么跟踪会更容易

标签: r igraph subgraph tidygraph


【解决方案1】:

您可以尝试induced_subgraph,如下所示group_by

g %>%
    as_tbl_graph() %>%
    activate(nodes) %>%
    as.data.frame() %>%
    group_by(module) %>%
    mutate(z = scale(induced_subgraph(g, name) %>% degree())) %>%
    ungroup()

【讨论】:

  • 谢谢,这很有帮助,虽然我还想计算(degs - 节点模块的平均度数)/节点模块的标准偏差。在我的帖子中由 z 指定。
  • @MoonS 查看我更新的解决方案。您可以使用scale 标准化度数。不需要meansd
猜你喜欢
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多