0

我正在尝试来自不同实验处理的网络上的 tidygraph,并且最感兴趣的是获取图形范围的指标以及可能的节点级指标。我似乎无法理解 tidygraph 的工作方式。

我正在使用 R v3.5 和 tidygraph v1.1。

我的数据是这样组织的:

dat <- data.frame(Treatment = rep(c("A","B"),each = 2),
                  from = c("sp1","sp2","sp1","sp2"),
                  to = c("sp2","sp3","sp3","sp3"),
                  weight = runif(4))

如果我想为每次治疗获得一个图形范围的指标,例如直径,我很想这样做:

dat %>%
 as_tbl_graph() %>%
 activate(edges) %>%
 group_by(Treatment) %>%
 mutate(Diameter = graph_diameter(weights = weight))

但是我不确定结果,因为然后给出了每个边缘的直径,而我期望每次处理(每个图表)都有一个测量值。

同样,如果我想导出一些指标,例如每个处理的每个节点的连接性,这似乎不是那么简单,因为处理变量是从节点表中删除的。在调用as_tbl_graph()之前,我一直在尝试各种技巧,例如将治疗 ID 粘贴到fromto列:

dat %>%
 mutate(from = paste(from, Treatment, sep = "_"),
       to = paste(to, Treatment, sep = "_")) %>%
 as_tbl_graph() %>%
 mutate(Treatment = substr(name, 5, 5), name = substr(name, 1, 3)) %>%
 group_by(Treatment) %>%
 mutate(Centrality = centrality_betweenness())

但我得到的错误是结果向量的大小错误(6 而不是 3 或 1)。

tidygraph 有没有办法派生组级图形范围和节点级指标?

4

1 回答 1

0

我认为这是一个有趣的问题。我已经尝试了几次,但仍然没有最好的解决方案。但是,我怀疑这个问题需要morph()函数才能正确分离图形。再说一次,我没有探索那么多。morph()但是,这里我使用函数给出直径问题的简单解决方案。希望它可以帮助你。

dat %>% 
 as_tbl_graph() %>%
 activate(edges) %>% 
 morph(to_split,split_by = "edges")%>% 
 filter(Treatment=="A") %>% 
 mutate(Diameter = graph_diameter(weights = weight)) %>% 
unmorph() %>% activate(edges) %>%  
morph(to_split,split_by = "edges") %>%
filter(Treatment=="B") %>%
mutate(Diameter = graph_diameter(weights = weight)) %>% 
unmorph()
于 2019-07-18T08:03:03.863 回答