0

我正在尝试使用graph_from_dataframe. 我的目标是在一个大组中绘制交互图。为此,我有一个顶点数据框(即具有名称和不同属性的演员列表(大约 200 个))和一个交互数据框(即具有两列“发起者”和“支持者”的边列表)。

并非该组的所有参与者都参与交互,因此存在隔离节点。但是,当我运行命令时,出现 igraph 错误:

“边缘列表中的某些顶点名称未在顶点数据框中列出”。

我已经仔细检查了我的 CSV 顶点数据是否包含我的 CSV 边缘列表的列中包含的所有名称。然而,因为不是所有的人都参与其中,所以它们不会出现在边缘列表中。我对错误感到困惑,因为消息不应该反之亦然——顶点列表中的某些名称未列在边缘列表中?

library(igraph)

links <- read.csv2("edgelist.csv")
vertices <- read.csv2("vertices.csv")
network <- graph_from_data_frame(d=links,vertices = vertices,directed = TRUE)

graph_from_data_frame 中的错误(d = 链接,顶点 = 顶点,:
边列表中的某些顶点名称未在顶点数据框中列出

4

1 回答 1

0

您可以使用假人扩展顶点表:

library(tidyverse)
library(igraph)
#> 
#> Attaching package: 'igraph'
#> The following objects are masked from 'package:dplyr':
#> 
#>     as_data_frame, groups, union
#> The following objects are masked from 'package:purrr':
#> 
#>     compose, simplify
#> The following object is masked from 'package:tidyr':
#> 
#>     crossing
#> The following object is masked from 'package:tibble':
#> 
#>     as_data_frame
#> The following objects are masked from 'package:stats':
#> 
#>     decompose, spectrum
#> The following object is masked from 'package:base':
#> 
#>     union

vertices <- tribble(
  ~name, ~ alias,
  1, "A",
  2, "B",
  3, "C"
)
vertices
#> # A tibble: 3 × 2
#>    name alias
#>   <dbl> <chr>
#> 1     1 A    
#> 2     2 B    
#> 3     3 C

links <- tribble(
  ~from,  ~to,
  1, 2,
  1, 3,
  1, 4,
  2, 5
)
links
#> # A tibble: 4 × 2
#>    from    to
#>   <dbl> <dbl>
#> 1     1     2
#> 2     1     3
#> 3     1     4
#> 4     2     5

other_vertices <-
  c(links$from, links$to) %>%
    unique() %>%
    setdiff(vertices$name) %>%
    tibble(name = .)
other_vertices
#> # A tibble: 2 × 1
#>    name
#>   <dbl>
#> 1     4
#> 2     5

vertices  %>%
  full_join(other_vertices) %>%
  graph_from_data_frame(d=links,vertices = ., directed = TRUE)
#> Joining, by = "name"
#> IGRAPH 9e3ec0f DN-- 5 4 -- 
#> + attr: name (v/c), alias (v/c)
#> + edges from 9e3ec0f (vertex names):
#> [1] 1->2 1->3 1->4 2->5

reprex 包于 2021-09-18 创建(v2.0.1)

于 2021-09-18T13:24:27.023 回答