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

在多个子图上循环或应用函数

如何解决在多个子图上循环或应用函数

这是此帖子 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 值。

解决方法

您可以像下面这样使用 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()

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