繁体   English   中英

基于边缘匹配的igraph空间距离边缘属性?

[英]igraph spatial distance edge attribute based on edge match?

我正在构建一个空间网络,其中边代表现实世界中两个位置之间的移动,边的权重代表移动发生的次数,节点是空间中的点。

例如,考虑机场。 其中节点是机场,边是机场之间的航班数量,每条边都有一个属性距离(即机场之间的公里数)。 我希望然后在一些下游分析中使用距离(不确定它们是否有用)。

无论如何,我不太确定如何将空间信息集成到图形层中(即,将距离归因于边缘)。 通常,如果在数据帧中工作,我会进行连接,但鉴于 igraph object 结构,我不确定如何执行此操作。 考虑到我拥有的大量数据,通过按 igraph 边缘的顺序设置属性来手动执行此操作是不可行的。

这是一个可重现的小例子。 实际上,我从大型邻接矩阵计算边缘,其中我有代表出发(从)和到达是(到)的行。 我可以在较早的时间使用与空间点相关联的坐标来计算距离,但是如何将所有内容整合到 igraph 中?

library(igraph)

g = make_graph(c("Paris", "Amsterdam", "Amsterdam", 
"London", "Milan", "Paris", "Dublin", "London"), directed = TRUE)


g

#> IGRAPH 3c2accf DN-- 5 4 -- 
#> + attr: name (v/c)
#> + edges from 3c2accf (vertex names):
#> [1] Paris    ->Amsterdam Amsterdam->London    Milan    ->Paris    
#> [4] Dublin   ->London

创建边缘的数据如下所示。 它是 tibble 格式,然后使用 xtabs 转换为 igraph 制作图形层所需的结构。

edges = tibble(from = c("Paris","Amsterdam","Milan","Dublin"), to = c("Amsterdam","London","Paris","London"))

edges = xtabs(~ from + to, edges)

edges
#>            to
#> from        Amsterdam London Paris
#>   Amsterdam         0      1     0
#>   Dublin            0      1     0
#>   Milan             0      0     1
#>   Paris             1      0     0

我猜有一些简单的方法可以通过匹配字符串将特定边缘与特定属性相关联,但只是不确定如何去做。 最终,我想要实现的只是拥有一个描述两个机场之间距离的边缘属性。

谢谢你。

我想你可以使用as_adjacency_matrix并启用attr = ,例如,

g %>%
  set_edge_attr(name = "distance", value = 1:ecount(.)) %>%
  as_adjacency_matrix(attr = "distance")

其中一个虚拟距离表由1:ecount(.)创建

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM