首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将as_tbl_graph()与group_by()一起使用?

如何将as_tbl_graph()与group_by()一起使用?
EN

Stack Overflow用户
提问于 2018-01-03 14:12:37
回答 1查看 1.1K关注 0票数 0

这是我最近遇到的一个issue on calculating graph depth的后续问题。这涉及到潮间带和潮汐图。在阅读了整理图之后,我觉得我应该试一试,但是在我的工作流程中遇到了一个新的问题。

当使用group_by()谓词dplyr为每个组创建一个图时,tidygraph中的guess_df_type()函数并不是我想要的,但是我无法找到一种方法来设置fromto值。下面是一个可重复的例子:

代码语言:javascript
复制
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()

其结果是:

代码语言:javascript
复制
# 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_headid_sec获取的。

在深入研究之后,我将tokenhead重命名为fromto,这至少解决了第一个问题:

代码语言:javascript
复制
tmp %>% 
  rename(
    from = token,
    to = head
  ) %>% 
  as_tbl_graph(directed = FALSE) 

结果:

代码语言:javascript
复制
# 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)时,结果是一个错误:

代码语言:javascript
复制
tmp %>% 
  as_tbl_graph() %>%
  group_by(id_head, id_sec)

Grouped_df_impl中的错误(data,unname(vars),drop): 列id_head未知

因此,无论是哪种方式,我都不知道如何将group_by与tidygraph结合使用。任何帮助都是非常感谢的!提前谢谢。

另外,很抱歉使用igraph标记,它应该是tidygraph,但还不存在。潮汐图是建立在图像和潮汐的基础上的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-03 14:26:45

对于第一个问题,我有点不确定应该如何将您的data.frame解析成一个图形-- tidygraph包含关于它所理解的所有图形表示的文档,我建议您参考这个文档。

对于第二个问题,这只是一个节点活动的问题,而边包含要分组的变量。只需在分组前激活边缘..。

代码语言:javascript
复制
tmp %>% 
  rename(
    from = token,
    to = head
  ) %>%
  as_tbl_graph() %>%
  activate(edges) %>%
  group_by(id_head, id_sec)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48079083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档