如何获取图中从一个节点到另一个节点的边权重之和

2024-03-03

我们可以使用以下公式求出每个顶点的相邻边的边权重:strength的功能igraph包裹。假设我们有一个如下图所示的图表

可重复的数据和代码

nodeA <- c("ID_1", "ID_2", "ID_3", "ID_4", "ID_5", "ID_16", "Node_30")
nodeB <- c("ID_11", "ID_3", "ID_4", "ID_5", "ID_3", "ID_11", "Node_3")
edge_weight <- c(0.5, 0.9, 0.8, 0.7, 0.5, 0.09, 0.7)
df_1 <- data.frame(nodeA, nodeB, edge_weight)

graph1 <- graph_from_data_frame(df_1, directed = FALSE)
E(graph2)$weight <- df_1$edge_weight
plot(graph1)

edge_strengts <- strength(graph1)

我得到的输出strength函数是图的每个顶点的边权重之和。

 ID_1    ID_2    ID_3    ID_4    ID_5   ID_16 Node_30   ID_11  Node_3 
   0.50    0.90    2.20    1.50    1.20    0.09    0.70    0.59    0.70

现在,我有一个边列表,我只想获取这些列表的边权重总和(而不是获取一个顶点的边总和)。为了获得更多说明,假设我有给定的边缘列表,

         nodeA      nodeB 
1        ID_2       ID_4  
2        ID_2       ID_5 
3        ID_1       ID_16 

我只想从给定图中获取上面列出的边的边总和(请注意,该图是无向的)。输出应该是这样的

         nodeA      nodeB    some_of_weight
1        ID_2       ID_4     1.70
2        ID_2       ID_5     1.40
3        ID_1       ID_16    0.59

对于第一条边 (ID_2 to ID_4)总和是1.70(例如:ID_2 到 ID_3 = 0.9,ID_3 到 ID_4 = 0.8,因此,0.9 + 0.8 = 1.70)对于所有边列表依此类推。

你能告诉我,我该如何做这份工作吗?

一条边的多条路径

该图可以包含多个边路径(即,对于一条边,我们可以有 1 个或多个不同的路径)。说吧,我们可以走了ID_3 to ID_4有两种方式(i)ID_3 - ID_2 - ID_4(总路径权重为2.4)和(ii)ID_3 - ID_5 - ID_4(总路径权重为1.5)。在这种情况下,我想取最大路径权重。

多路径的可重复数据

nodeA <- c("ID_1", "ID_2",  "ID_4", "ID_5", "ID_16", "Node_30", "ID_6", "ID_2")
nodeB <- c("ID_11", "ID_3",  "ID_5", "ID_3", "ID_11", "Node_3", "ID_3", "ID_4")
edge_weight <- c(0.5, 0.9, 0.8, 0.7, 0.5, 0.09, 0.7, 1.5)

Update

由于您正在寻找两个顶点之间的最长路径,因此您可以尝试下面的代码

df_2$max_sum_weight <- apply(
  df_2,
  1,
  function(x) {
    max(sapply(
      all_simple_paths(graph1, x[["v"]], x[["to"]]),
      function(v) {
        sum(E(graph1)$weight[get.edge.ids(graph1, c(rbind(head(v, -1), v[-1])))])
      }
    ))
  }
)

这使

> df_2
     v    to max_sum_weight
1 ID_2  ID_4            2.4
2 ID_2  ID_5            2.3
3 ID_1 ID_16            1.0
4 ID_3  ID_4            2.4

Data

df_2 <- data.frame(
  v = c("ID_2", "ID_2", "ID_1", "ID_3"),
  to = c("ID_4", "ID_5", "ID_16", "ID_4")
)

上一个答案(最短路径)


Try shortest.paths

transform(
  df_2,
  sum_of_weight = diag(shortest.paths(graph1, v, to))
)

or

transform(
  df_2,
  sum_of_weight = shortest.paths(graph1)[as.matrix(df_2)]
)

这使

     v    to sum_of_weight
1 ID_2  ID_4          1.70
2 ID_2  ID_5          1.40
3 ID_1 ID_16          0.59
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取图中从一个节点到另一个节点的边权重之和 的相关文章

  • 不理解..密度的行为

    在下面的数据框中 我预计密度的 y 轴值为 0 6 和 0 4 但它们是 1 0 我觉得我使用的方式显然缺少一些非常基本的东西 密度 但是我的大脑冻结了 我将如何使用 密度 获得所需的行为 任何帮助将不胜感激 df lt data fram
  • 获取所有参数作为列表

    R 是否提供对象 函数 方法 关键字来获取所有函数参数 使用一个例子 function a b default 会提供a and b也 在函数环境内 有没有类似的说法list 这还包括a and b在结果中 或者换一种方式 简写list a
  • 确定 R 中的组是否重复某个值

    我有一个包含许多列和行的数据 我想通过创建新的逻辑变量来确定某个组的值是否重复 相同 所以我的数据如下所示 v0 lt c 1 2 3 4 5 6 7 8 9 v1 lt c a b a c e c b b e v2 lt c R NA R
  • r testthat 和 covr 在非包库中使用

    我希望能够使用testthat and covr在一个项目中not一个 r 包 事实上不使用任何第三方服务 只是普通的旧 r 源文件的集合 我正在努力找出这是否可行 如果可以 则已设置有关如何设置的说明 我发现假设你正在编写一个 r 包 我
  • 如何使用 ggplot2 绘制 NA 间隙

    在 R 的基本绘图中 如果数据系列 ggplot2 中存在 NA 则会绘制间隙 举个例子看看 df data frame x c 1 10 y c 1 10 df 5 7 NA plot df type l 但是 ggplot2 删除了缺失
  • R 抑制系统或 shell 命令的控制台输出

    我有这个 Windows 批处理文件 我使用 R 从 R 调用该文件shell 命令 该批处理文件执行一些计算并将它们写入磁盘上 也写入屏幕上 我只对磁盘输出感兴趣 我无法更改批处理文件 批处理文件可能有点愚蠢 例如 echo off ec
  • 通过删除连续的重复项来减少字符串长度

    我有一个包含 2 个字段的 R 数据框 ID WORD 1 AAAAABBBBB 2 ABCAAABBBDDD 3 我想通过仅保留字母而不是重复中的重复项来简化具有重复字母的单词 e g AAAAABBBBB应该给我AB and ABCAA
  • 获取行名以 ABC111 开头的所有行

    我们有以下数据框 col1 col2 col3 ABC111001 12 12 13 ABC111002 3 4 5 ABC000111 7 6 1 ABC000112 9 23 1 如何获取行名以 开头的所有行ABC111 如下 ABC1
  • 如何在 rmarkdown 中显示带有 results='asis' 的格式化 R 输出

    当使用 results asis 时 有没有办法在 rmarkdown knitr 中显示格式化程序 R 输出 一个例子是以下函数 myfun lt function cat hello n cat c one 1 two 2 然后 该块将
  • 如何拆分 data.frame -> 将合并应用于子集 -> 合并到 data.frame 中

    我真的不知道如何在不使用 for 循环的情况下实现这一目标 x lt c a b c d gt x 1 a b c d data lt data frame x c a b a b c a a b c d name c one one tw
  • R.scale() 和 sklearn.preprocessing.scale() 之间的区别

    我目前正在将数据分析从 R 转移到 Python 当在 R 中缩放数据集时 我将使用 R scale 根据我的理解 它将执行以下操作 x mean x sd x 为了替换该函数 我尝试使用 sklearn preprocessing sca
  • 在闪亮的应用程序中使用传单地图作为过滤器

    是否可以使用传单地图来过滤闪亮应用程序中的数据 就像在 Tableau 或 Power BI 中一样 方法是单击地图上的某个状态 然后根据条件过滤另一个图表或表格选择 None
  • ggplot() 使用scale::percent_format() 缩放产生奇怪的结果

    library tidyverse mtcars gt count cyl gt mutate prop n sum n gt ggplot aes x cyl y prop geom point scale y continuous la
  • 如何在主图区域之外的 ggplot2 中添加多个标题

    我想为页脚添加两个标题 但 ggplot 似乎只需要 1 是否有解决方法可以将注释或 geom text 添加到左下角和右下角 library ggplot2 p lt ggplot mtcars aes x wt y mpg geom p
  • 如何更改数据表中的少数列名称

    我有一个包含 10 列的数据表 town tc one two three four five six seven total 需要生成我正在使用的列 一 到 总计 的平均值 DTmean lt DT lapply SD mean by t
  • 为什么 data.table `:=` 的 knit 缓存失败?

    这在精神上与this https stackoverflow com q 15267018 1900520问题 但机制上一定不同 如果您尝试缓存knitr包含一个块data table 分配然后它的行为就好像该块尚未运行 并且后面的块看不到
  • 读取并绘制从大文件中读取的数据

    我们有相当大的文件 大约为 1 1 5 GB 主要是日志文件 其中包含易于解析为 csv 的原始数据 随后应该将其绘制成图表以生成一组图形图像 目前 我们正在使用 bash 脚本将原始数据转换为 csv 文件 其中仅包含需要绘制图表的数字
  • Flash 图表和图形的最佳解决方案是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道融合图表 http www fusioncharts com 还有其他好的解决方案或 API 用
  • 无重叠的抖动点

    My data a lt sample 1 5 100 replace TRUE b lt sample 1 5 100 replace TRUE c lt sample 1 10 100 replace TRUE d lt sample
  • 使用 purrr::map() 更改和分配新变量名称

    我刚刚开始掌握编写函数并使用 lapply purrr map 使我的代码更加简洁 但显然还没有完全理解它 在我当前的示例中 我想重命名 lm robust 对象的系数名称 然后更改 lm robust 对象以合并新名称 我目前这样做 li

随机推荐