根据其他二分投影设置一个二分投影的边缘属性

时间:2020-08-19 19:50:04

标签: r dplyr igraph

我正在用igraph中的二分投影和单模网络做一些工作。有没有一种方法可以使用另一个模式(下面的家乡网络)的顶点来标记一个模式下的网络(下面的艺术家网络)的边缘?

我想做类似下面的事情,但是担心随着艺术家节点数量的增加以及家乡之间的关系开始出现(例如,在两个小镇之间分配时间的艺术家),它不会扩展。

谢谢!

library(tibble)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(igraph)
#> 
#> Attaching package: 'igraph'
#> The following objects are masked from 'package:dplyr':
#> 
#>     as_data_frame, groups, union
#> 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

df <- tibble(user = c("Mac Miller", "Wiz Khalifa", "Arizona Zervas", "Lil Wayne", "Birdman", "Logic"), hometown = c("Pittsburgh", "Pittsburgh", "DC", "New Orleans", "New Orleans", "DC"))

g <- graph_from_data_frame(df) %>% 
    igraph::set_vertex_attr(., name = "type", value = V(.)$name %in% df$hometown) %>% 
    bipartite_projection()

igraph::get.edgelist(g$proj1)
#>      [,1]             [,2]         
#> [1,] "Mac Miller"     "Wiz Khalifa"
#> [2,] "Arizona Zervas" "Logic"      
#> [3,] "Lil Wayne"      "Birdman"

g1 <- igraph::set.edge.attribute(graph = g$proj1, name = "hometown", value = get.vertex.attribute(g$proj2)$name)

get.edgelist(g1)
#>      [,1]             [,2]         
#> [1,] "Mac Miller"     "Wiz Khalifa"
#> [2,] "Arizona Zervas" "Logic"      
#> [3,] "Lil Wayne"      "Birdman"

get.edge.attribute(g1)
#> $weight
#> [1] 1 1 1
#> 
#> $hometown
#> [1] "Pittsburgh"  "DC"          "New Orleans"

reprex package(v0.3.0)于2020-08-19创建

0 个答案:

没有答案
相关问题