微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在用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","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)
#>      [,] "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创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。