首页 > 解决方案 > 重复顶点 ID R

问题描述

我正在尝试制作网络可视化,以便从经理调用活动到存储位置。唯一的问题是我不断收到错误“重复的顶点 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)

标签: rdataframeigraph

解决方案


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

您的节点数据不仅包括来自 column 的唯一值edges$from,还必须包括来自edges$fromand的所有唯一值edges$to,因为您将邻接列表数据传递给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");

推荐阅读