这是我最近遇到的一个issue on calculating graph depth的后续问题。这涉及到潮间带和潮汐图。在阅读了整理图之后,我觉得我应该试一试,但是在我的工作流程中遇到了一个新的问题。
当使用group_by()谓词dplyr为每个组创建一个图时,tidygraph中的guess_df_type()函数并不是我想要的,但是我无法找到一种方法来设置from和to值。下面是一个可重复的例子:
library(tidygraph)
library(tidyverse)
tmp <- tibble(
id_head = as.integer(c(4,4,4,4,4,4,5,5,5,5)),
id_sec = as.integer(c(1,1,1,2,2,2,1,1,2,2)),
token = as.integer(c(1,2,3,1,2,3,1,2,1,2)),
head = as.integer(c(2,2,2,1,1,2,2,2,2,2)),
root = as.integer(c(2,2,2,1,1,1,2,2,2,2))
)
tmp %>%
group_by(id_head, id_sec) %>%
as_tbl_graph()其结果是:
# A tbl_graph: 4 nodes and 10 edges
#
# An undirected multigraph with 1 component
#
# Node Data: 4 x 1 (active)
name
<chr>
1 4
2 5
3 1
4 2
#
# Edge Data: 10 x 5
from to token head root
<int> <int> <dbl> <dbl> <dbl>
1 1 3 1 2 2
2 1 3 2 2 2
3 1 3 3 2 2
# ... with 7 more rows节点不是从令牌列获取的,而是从id_head和id_sec获取的。
在深入研究之后,我将token和head重命名为from和to,这至少解决了第一个问题:
tmp %>%
rename(
from = token,
to = head
) %>%
as_tbl_graph(directed = FALSE) 结果:
# A tbl_graph: 3 nodes and 10 edges
#
# An undirected multigraph with 1 component
#
# Node Data: 3 x 1 (active)
name
<chr>
1 1
2 2
3 3
#
# Edge Data: 10 x 5
from to id_head id_sec root
<int> <int> <int> <int> <int>
1 1 2 4 1 2
2 2 2 4 1 2
3 2 3 4 1 2
# ... with 7 more rows让我进一步阐述一下我所面临的问题。当我试图在图形中使用group_by(id_head,id_sec)时,结果是一个错误:
tmp %>%
as_tbl_graph() %>%
group_by(id_head, id_sec)Grouped_df_impl中的错误(data,unname(vars),drop): 列
id_head未知
因此,无论是哪种方式,我都不知道如何将group_by与tidygraph结合使用。任何帮助都是非常感谢的!提前谢谢。
另外,很抱歉使用igraph标记,它应该是tidygraph,但还不存在。潮汐图是建立在图像和潮汐的基础上的。
发布于 2018-01-03 14:26:45
对于第一个问题,我有点不确定应该如何将您的data.frame解析成一个图形-- tidygraph包含关于它所理解的所有图形表示的文档,我建议您参考这个文档。
对于第二个问题,这只是一个节点活动的问题,而边包含要分组的变量。只需在分组前激活边缘..。
tmp %>%
rename(
from = token,
to = head
) %>%
as_tbl_graph() %>%
activate(edges) %>%
group_by(id_head, id_sec)https://stackoverflow.com/questions/48079083
复制相似问题