我正在尝试对来自不同实验方法的网络进行整理,并且最有兴趣了解图形范围的指标以及节点级别的指标。我似乎无法弄清楚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))
但是我不确定结果,因为然后为每个边缘指定了直径,而我希望每次处理(每个图形)都有一个度量。
类似地,如果我想得出一些指标,例如每种治疗的每个节点的连通性,那么这似乎不是那么简单,因为治疗变量已从节点表中删除。我一直在尝试各种技巧,例如将治疗ID粘贴到 from 和 to 列,然后按以下方式调用 as_tbl_graph():
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是否可以导出组级图范围和节点级度量?
答案 0 :(得分: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()