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

如何将as_tbl_graph()与group_by()一起使用?,r,dplyr,tidygraph,R,Dplyr,Tidygraph,这是我最近遇到的一个问题的后续问题。这涉及到tidyverse和tidygraph。在阅读了tidygraph之后,我觉得我应该尝试一下,但我在工作流程中遇到了一个新问题 当使用groupby()动词fromdplyr为每个组创建一个图形时,as\u tbl\u graph()中的guess\u df\u type()函数fromtidygraph并不是我想要的,但我找不到一种方法来设置from和to值。下面是一个可复制的示例: library(tidygraph) library(tidyve

这是我最近遇到的一个问题的后续问题。这涉及到tidyverse和tidygraph。在阅读了tidygraph之后,我觉得我应该尝试一下,但我在工作流程中遇到了一个新问题

当使用
groupby()
动词fromdplyr为每个组创建一个图形时,
as\u tbl\u graph()
中的
guess\u df\u type()
函数fromtidygraph并不是我想要的,但我找不到一种方法来设置
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: 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
分组的_-df_-impl(数据、未命名(变量)、删除)中出错:

id\u head
未知

所以无论哪种方式,我都不明白如何将group_by与tidygraph一起使用。非常感谢您的帮助!提前谢谢


另外,很抱歉使用igraph作为标记,它应该是tidygraph,但它还不存在。tidygraph是基于igraph和tidyverse tho构建的。

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

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

tmp %>% 
  rename(
    from = token,
    to = head
  ) %>%
  as_tbl_graph() %>%
  activate(edges) %>%
  group_by(id_head, id_sec)

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

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

tmp %>% 
  rename(
    from = token,
    to = head
  ) %>%
  as_tbl_graph() %>%
  activate(edges) %>%
  group_by(id_head, id_sec)

关于第一部分:数据是文本数据的模型,
token
head
表示消息(
id\u head
)中句子(
id\u sub
)中标记之间的相互关系作为依赖树。那么它是一种链表吗?你可能可以像链表一样处理它,但我不确定这是否有助于理解它这是NLP中依赖关系树的更好示例。在我的例子中,所有的令牌都至少在一条边上指向根令牌。对于这种图形表示,没有内置支持。如果您将单个data.frame作为_tbl_graph传递给
,它将期望它是一个edgelist,但您的是一个节点列表,父/子记录为变量。我建议您将边缘信息提取到一个单独的数据框中,只需对第一部分进行
tbl_图(节点、边缘)
:数据是文本数据的模型,并且
token
head
都表示消息中句子(
id\u sub
)中标记之间的关系(
id\u头
)作为依赖树。那么它是一种链表吗?你可能可以像链表一样处理它,但我不确定这是否有助于理解它。这是NLP中依赖树的一个更好的例子。在我的例子中,所有标记都至少在一条边上指向根标记。对于这种图表示,没有内置支持。如果您将一个data.frame作为_tbl_graph
传递给
,它期望它是一个edgelist,但您的是一个节点列表,父/子记录为变量。我建议您将边信息提取到一个单独的数据框中,只需执行
tbl_graph(节点,边)
tmp %>% 
  as_tbl_graph() %>%
  group_by(id_head, id_sec)
tmp %>% 
  rename(
    from = token,
    to = head
  ) %>%
  as_tbl_graph() %>%
  activate(edges) %>%
  group_by(id_head, id_sec)