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

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

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

这里有一个可重复使用的小例子.在实际情况下,我从大型邻接矩阵计算边,其中有行表示出发(From)和到达(To).我可以使用早先与空间点相关联的坐标来计算距离,但是如何将所有内容整合到图形中呢?

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转换成iggraph所需的 struct 来制作图层.

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

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

谢谢.

推荐答案

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

edges %>%
  mutate(xfrom = c(48.87, 8.87, 45.49, 53.34), yfrom = c(2.30, 2.30, 9.17, -6.26), xto = c(52.36, 51.48, 48.87, 51.48), yto = c(4.87, -0.10, 2.30, -0.10)) %>%
  mutate(distance_km = geosphere::distHaversine(cbind(xfrom, yfrom), cbind(xto, yto)) / 1000) %>%
  select(from, to, distance_km) %>%
  graph_from_data_frame(directed = FALSE) %>%
  as_adjacency_matrix(attr = "distance_km")

你就会得到

5 x 5 sparse Matrix of class "dgCMatrix"
             Paris Amsterdam    Milan  Dublin   London
Paris       .       481.8386 851.3811   .        .
Amsterdam 481.8386    .        .        .     4749.576
Milan     851.3811    .        .        .        .
Dublin      .         .        .        .      716.185
London      .      4749.5765   .      716.185    .

R相关问答推荐

如何使用R Shiny中的条件面板仅隐藏和显示用户输入,同时仍允许运行基础计算?

矩阵%*%矩阵中的错误:需要数字/复杂矩阵/向量参数

如何编辑ggplot的图例字使用自定义对象(gtable)?'

如何从R中的字符串元素中减go 一个数字?

在组中添加值增加和减少的行

为什么舍入POSIXct会更改能力以匹配等效的POSIXct?

如何使用STAT_SUMMARY向ggplot2中的密度图添加垂直线

未识别时区

多个模拟序列间的一种预测回归关系

2个Rscript.exe可执行文件有什么区别?

打印XTS对象

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

有没有办法定制Plot(allEffects())面板标题?

使用ggplot2中的sec_axis()调整次轴

是否从列中删除★符号?

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

使用dqur在不同变量上创建具有多个条件的变量

是什么打破了此Quarto仪表板中的工具提示?

从字符串01JAN2021创建日期

如何将一列相关性转换为R中的相关性矩阵