【问题标题】:How do I setup data for tidygraph and ggraph?如何为 tidygraph 和 ggraph 设置数据?
【发布时间】:2020-08-28 11:00:06
【问题描述】:

我想要运行网络分析,但完全不知道如何正确构建我的数据,因为大多数示例已经在 tofrom 级别构建了数据。

我的数据示例如下:

df <- data.frame(Name = c("Alice", "Ben", "Tom", "Jane", "Neil", "Alice", "Tom", "Ben", "Jane", "Neil", "Alice", "Tom", "Ben", "Jane", "Bob"),
         Location = c("Ward", "Desk", "Op", "Call", "Off",
                      "Ward", "Desk", "Op", "Call", "Off",
                      "Ward", "Desk", "Op", "Call", "Off"),
         Rating = c(1, 1, 1, 1, 1, 10, 10, 10, 10, 10, 8, 8, 8, 8, 8))

我现在希望为每个Rating 获得tofrom 的人组合,用Name 表示。您还会注意到,在不同的评级期间,人们可能处于不同的Location,尽管我更愿意这样做,结合Name 作为节点,Rating 作为边缘。

我看过library(iterpc),但我很难理解整个组合的东西,有五个不同的阵容。

我的问题是否有潜在的dplyr 解决方案?谢谢!

编辑:看起来我的问题与this 非常相似,但标记的答案对我不起作用,而是得到Error: Column name Name must not be duplicated.

【问题讨论】:

    标签: r dplyr ggraph tidygraph


    【解决方案1】:

    如果您希望 from 列成为 Name 并且 to 列成为您的 Rating 列,那么 tidygraph 会为您完成此映射。

    library(tidygraph)
    #> Warning: package 'tidygraph' was built under R version 3.6.3
    #> 
    #> Attaching package: 'tidygraph'
    #> The following object is masked from 'package:stats':
    #> 
    #>     filter
    
    df <- data.frame(
      Name = c(
        "Alice", "Ben", "Tom", "Jane", "Neil",
        "Alice", "Tom", "Ben", "Jane", "Neil",
        "Alice", "Tom", "Ben", "Jane", "Bob"
      ),
      Location = c(
        "Ward", "Desk", "Op", "Call", "Off",
        "Ward", "Desk", "Op", "Call", "Off",
        "Ward", "Desk", "Op", "Call", "Off"
      ),
      Rating = c(
        1, 1, 1, 1, 1,
        10, 10, 10, 10, 10,
        8, 8, 8, 8, 8)
    )
    
    tg <- as_tbl_graph(df)
    tg
    #> # A tbl_graph: 11 nodes and 15 edges
    #> #
    #> # A directed acyclic multigraph with 4 components
    #> #
    #> # Node Data: 11 x 1 (active)
    #>   name 
    #>   <chr>
    #> 1 Alice
    #> 2 Ben  
    #> 3 Tom  
    #> 4 Jane 
    #> 5 Neil 
    #> 6 Bob  
    #> # ... with 5 more rows
    #> #
    #> # Edge Data: 15 x 3
    #>    from    to Rating
    #>   <int> <int>  <dbl>
    #> 1     1     7      1
    #> 2     2     8      1
    #> 3     3     9      1
    #> # ... with 12 more rows
    

    您可以通过查看边缘表的第一行并查看17 之间的边缘来仔细检查此映射是否正确完成,即AliceWard,这是第一行原始数据框中的行。

    data.frame(tg)
    #>     name
    #> 1  Alice
    #> 2    Ben
    #> 3    Tom
    #> 4   Jane
    #> 5   Neil
    #> 6    Bob
    #> 7   Ward
    #> 8   Desk
    #> 9     Op
    #> 10  Call
    #> 11   Off
    

    reprex package (v0.3.0) 于 2020 年 9 月 21 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多