【问题标题】:Weighted edges in R/igraphR / igraph中的加权边缘
【发布时间】:2014-08-19 11:04:17
【问题描述】:

我正在使用 R 和 igraph 包来绘制用 graphml 编写的图形,并且我想使用此语法中包含的 weight 参数

<edge id="e389" source="w4" target="w0">
    <data key="d1">0.166666666667</data>
</edge>

我可以得到值

weight = E(f)$weight  // f is the graph

但在计算df = degree(f)之前我不知道如何使用weight

更多信息:所有节点都相互连接,权重为 1 / (number_of_nodes - 1),因此每个节点的度数应为 1。

graphml 文件

<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<key id="d0" for="node" attr.name="label" attr.type="string"/>
<key id="d1" for="edge" attr.name="weight" attr.type="float"/>
<key id="d2" for="node" attr.name="type" attr.type="string"/>
<key id="d3" for="node" attr.name="tweet" attr.type="int"/>
<key id="d4" for="node" attr.name="color" attr.type="string"/>
<graph id="G" edgedefault="undirected">
<node id="w4">
    <data key="d0">value1</data>
    <data key="d2">word</data>
    <data key="d1">0.166666666667</data>
    <data key="d4">green</data>
</node>
.
.
.
<node id="w2">
    <data key="d0">value2</data>
    <data key="d2">word</data>
    <data key="d1">0.166666666667</data>
    <data key="d4">green</data>
</node>
<edge id="e389" source="w4" target="w0">
    <data key="d1">0.166666666667</data>
</edge>

【问题讨论】:

  • 是否有可能提供示例 graphml 文件?我很困惑,因为我在您的 XML 中没有看到 weight 参数 - 我看到 edged1 属性,而您的 R 代码正在获取 vertex 的属性...
  • @spacedman 帖子已更新,是的,您在 R 代码获取顶点属性中的错误是正确的。也更正了
  • “计算 df=degree(f)”是什么意思?你说每个顶点都连接到每个其他顶点,所以degree(f) 只是每个顶点的顶点数减一。你真的想要每个顶点的边权重总和吗?那不是学位......
  • @spacedman 我解释得很糟糕,所以:) 我需要我的度数(在这种情况下才发现它被称为加权度数)在每个节点中为 1,我想使用边缘来获得它每条边的权重等于 1 / (number_of_nodes - 1)。只是我不知道语法和命令,因为我使用 R 已经有几天了

标签: r igraph


【解决方案1】:

您很可能不是在寻找degree(),因为它不关心边缘权重。您可能正在寻找graph.strength() 函数吗?

# create fully connected graph
g <- graph.full(10)

# assign weights such that every weight is 1/number_of_nodes -1
E(g)$weight <- 1/( length( V(g) ) -1 )

# calculate the "weighted degree"
graph.strength(g)

[1] 1 1 1 1 1 1 1 1 1 1

或者,您是否正在寻找归一化度数?

degree( g, normalized = TRUE )

[1] 1 1 1 1 1 1 1 1 1 1

【讨论】:

  • 完美! graph.strength() 正是我需要的。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多