【问题标题】:how to scale edge related number by a vertex related number in igraph?如何通过 igraph 中的顶点相关数缩放边缘相关数?
【发布时间】:2019-07-18 00:37:38
【问题描述】:

我有一个由 igraph 包中的函数 graph.data.frame 创建的图形数据框。我的边包含有关“关系强度”的信息,而我的节点包含有关“节点强度”的信息。

我想做的是通过关联的各个节点的强度来衡量关系的强度。

对于我的可重现示例,我将使用igraph 文档中的设置(输入?graph.data.frame 并向下滚动)。我绘制了各个参与者之间的关系,并使用advice 列作为关系强度的指标。出于某种疯狂的原因,我想通过建议的接受者和提供者的平均年龄来衡量建议质量的值。

我能够在创建图形数据框之前进行缩放(我将边和节点作为两个单独的 data.tables,所以我所要做的就是一堆加入 + 一些巫术,因为我的真实情况是比下面的例子复杂一点),但我很好奇在创建 igraph 数据框后如何做。

actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David",
                            "Esmeralda"),
                     age=c(48,33,45,34,21),
                     gender=c("F","M","F","M","F"))
relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David",
                               "David", "Esmeralda"),
                        to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
                        same.dept=c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE),
                        friendship=c(4,5,5,2,1,1), advice=c(4,5,5,4,2,3))


# create graph data frame
# note that i treat the network as undirected here
g <- graph.data.frame(relations, directed=FALSE, vertices=actors)
print(g, e=TRUE, v=TRUE)

# plot a graph of the network
plot(g,
     edge.label = edge_attr(g, 'advice'),
     vertex.label = paste0(vertex_attr(g, 'name'),
                           '\nage = ',
                            vertex_attr(g, 'age')))

【问题讨论】:

  • 你所说的“规模”是什么意思?如果你有一个边权重和相应的节点权重,你会计算它们的什么函数?
  • 我想把两者分开
  • 在这种情况下,它将类似于advice/(mean(age_of_node_1, age_of_node_2))

标签: r igraph network-analysis


【解决方案1】:

您尝试计算的关键是 ends 函数,它给出了边的两端。

E(g)$ScaledAdvice = 0
for(e in E(g)) {
    E(g)$ScaledAdvice[e] =  E(g)$advice[e] / mean(V(g)[ends(g, e)]$age)
}

【讨论】:

  • 我不知道这个功能。这个很好,非常感谢你
猜你喜欢
  • 2017-09-29
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多