Как создать атрибут type для двудольного графа с помощью igraph inR

У меня есть данные двухлинейного сетевого края, такие как tmp ниже:

tmp <- read.table(text="PersonID CompanyID
P1 C000001
P2 C000001
P3 C000001
P4 C000001
P5 C000001
P6 C000002
P7 C000002
P8 C000002
P9 C000003
P10 C000003
P11 C000003
P12 C000003",header=TRUE)

# make a graph using this data
el <- graph.edgelist(as.matrix(tmp))

И я сделал это, чтобы добавить атрибут "тип" для создания двудольного графа в igraph

V(el)$type <- V(el)$name %in% el[,1]

Но оказалось, что тип "ложь" и имена не могут совпадать. Кто-нибудь знает, что здесь происходит не так?

> table(V(el)$type)
FALSE 
   15 

> V(el)$name
 [1] "P1"      "C000001" "P2"      "P3"      "P4"    "P5"    "P6"    "C000002"
 [9] "P7"      "P8"      "P9"      "C000003" "P10"   "P11"   "P12"  

1 ответ

Вместо el[,1]использовать get.edgelist(el)[,1], el[,1] не является первым столбцом списка границ, как вы могли ожидать; Индексирование графического объекта, как вы сделали, на самом деле даст вам кусочки матрицы смежности.

Другие вопросы по тегам