【问题标题】:Duplicate Vertex IDs R重复顶点 ID R
【发布时间】:2019-05-18 22:23:41
【问题描述】:

我正在尝试制作网络可视化,以便从经理调用活动到商店位置。唯一的问题是我不断收到错误“重复的顶点 ID”。我需要有多个相同的顶点 ID,因为一位经理已经调用了多个商店。我该如何解决这个问题?

我的边缘数据组织如下:

from    to    weight
12341    1      5
12341    2      4
23435    1      3

我的节点数据只包含 from 列:

from   
12341
12341
23435

这是我尝试运行的代码:

MANAGER_LOC <- graph_from_data_frame(d = edges, vertices = nodes, 
directed = TRUE)

【问题讨论】:

  • 离开vertices = nodes
  • graph_from_data_frame 中,来自to 列的值也被视为节点。看起来您想在管理器之间定义一个网络(一种模式网络),对吧?

标签: r dataframe igraph


【解决方案1】:

您收到重复的顶点 ID 错误,因为您需要引用 vertices = 中的唯一节点数据。您可以使用unique(nodes),但这会给您带来另一个错误,因为您在邻接列表数据中引用的节点12 不包含在您的nodes 数据中。

您的节点数据不能只包含来自edges$from 列的唯一值,它必须包括来自edges$fromedges$to 的所有唯一值,因为您将adjacency list 数据传递给graph_from_data_frame() 函数。

所以在edges$to 中,您还需要按名称引用顶点,如edges$from 中那样,例如1234123435

这里有一些 R 代码,可能包括您想要实现的目标。

#graph from your data frame
MANAGER_LOC <- graph_from_data_frame(
  d = edges
  ,vertices = unique(c(edges$from, edges$to))
  ,directed = TRUE);

#plot also includes vertices 1 and 2
plot(
  x = MANAGER_LOC
  ,main = "Plot from your edges data");


#plot from your data assuming you are referencing an id in edges$to
MANAGER_LOC <- graph_from_data_frame(
  d = merge(
    x = edges
    ,y = data.frame(
      to_vertice_id = 1:length(unique(edges$from))
      ,to_vertice = unique(edges$from))
    ,by.x = "to"
    ,by.y = "to_vertice_id"
    ,all.x = T)[,c("from","to_vertice","weight")]
  ,vertices = unique(edges$from)
  ,directed = TRUE);

#plot does not include vertices 1 and 2
plot(
  x = MANAGER_LOC
  ,main = "Plot assuming vertice ID
  reference in edges$to");


#plot from your data assuming you are referencing the xth value of edges$from in edges$to
MANAGER_LOC <- graph_from_data_frame(
  d = merge(
    x = edges
    ,y = data.frame(
      to_vertice_ref = 1:nrow(edges)
      ,to_vertice = edges$from)
    ,by.x = "to"
    ,by.y = "to_vertice_ref"
    ,all.x = T)[,c("from","to_vertice","weight")]
  ,vertices = unique(edges$from)
  ,directed = TRUE);

#plot does not include vertices 1 and 2
plot(
  x = MANAGER_LOC
  ,main = "Plot assuming edges$from
  reference in edges$to");

【讨论】:

  • 使用此解决方案时,当同一个节点发生多次交互时,我无法看到网络交互。例如,一切都只是往返于单个节点,而不是向我显示来自同一节点的所有边。您对此有什么解决方案吗?谢谢。
  • 这样,您将不会看到同一对节点之间的多次交互。
  • 如果要可视化交互次数,我想到了两个选项:(1)在图中,将两个节点之间的交互次数设置为边权重,并将顶点大小设置为度中心性igraph.org/r/doc/degree.html; (2) 从节点标识符和交互标识符创建一个图,并制作一个二分图(包括两种不同的顶点)igraph.org/r/doc/make_bipartite_graph.html 并将其可视化。我想,会选择第一个选项。您还可以将度中心性添加到顶点标签。
猜你喜欢
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多