Дублирующиеся идентификаторы вершин R - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь создать сетевую визуализацию для вызова активности от менеджера до места хранения.Единственная проблема заключается в том, что я продолжаю получать сообщение об ошибке "Duplicate Vertex IDs".Мне нужно иметь несколько одинаковых идентификаторов вершин, так как один менеджер вызвал более одного магазина.Как мне обойти это?

Мои данные ребер организованы следующим образом:

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)

1 Ответ

0 голосов
/ 22 декабря 2018

Вы получаете ошибку идентификатора дубликата вершины, потому что вам нужно ссылаться на уникальные данные узла в vertices =.Вы можете использовать unique(nodes), но это даст вам еще одну ошибку, поскольку узлы 1 и 2, на которые вы ссылаетесь в данных списка смежности, не включены в ваши nodes данные.

Ваш узелданные не могут включать в себя только уникальные значения из столбца edges$from, они должны включать все уникальные значения из edges$from и edges$to, поскольку вы передаете список смежности данные в функцию graph_from_data_frame().

Так что в edges$to вам также нужно ссылаться на вершины по их именам, как в edges$from, например, 12341 или 23435.

Вот некоторый R-код, возможно, включающий то, что вы естьпытаясь достичь.

enter image description here

#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");
...