igraph:如何计算两个节点的差异'值并将结果存储在连接边

时间:2016-08-23 06:36:16

标签: r igraph

我有一个简单的问题,我无法找到一个简单的解决方案。我有一个10个节点的完整图表

require(igraph)
g <- ba.game(10, directed = FALSE)
g[V(g), V(g)] <- TRUE
g <- simplify(g)

节点的属性value包含一个数字,但也可能缺少值。

set.seed(2)
df <- data.frame(id = 1:10,
                 value = sample(c(1:10, NA), 10, replace = T))
V(g)$value <- df$value

现在我想计算节点值之间的差异并将其存储在相应的边缘。我创建了图表的边缘列表

el <- as.data.frame(get.edgelist(g))

添加与每个节点对应的值。

el <- merge(el, df, by.x = 'V1', by.y = 'id')
el <- merge(el, df, by.x = 'V2', by.y = 'id')

并计算绝对差值

el$diff <- abs(el$value.x - el$value.y)

此时我会假设如果我将边缘列表中的值插入边缘,我将完成任务

E(g)$diff <- el$diff

但实际上边缘似乎没有订购,事实上如果我这样做

plot(g, vertex.label = V(g)$value, edge.label = E(g)$diff)

我立即看到某些东西不起作用,边缘值随机分布。

enter image description here

1 个答案:

答案 0 :(得分:0)

E(g)返回一个与el行不同的edgelist。作为快速修复,请将两个调用的顺序更改为merge,以便&#34; by.x =&#39; V2&#39;&#34;是第一个&#34; by.x =&#39; V1&#39;&#34;是第二个。