创建具有隔离节点的igraph [英] creating igraph with isolated nodes
问题描述
我对此有一个类似的问题:使用使用igraph隔离节点
I have a similiar problem to this one: Reading adjacency lists with isolated nodes using igraph
我想绘制一些没有关系的节点.但是由于某种原因,上面线程中提到的解决方案无法正常工作
I want to plot nodes where some have no relationships. But for some reason the solution mentioned in the thread above is not working
我的数据
data <- data.frame(ID = c(143918,176206,210749,219170,247818,314764,321459,335945,339637,700689,712607,712946,735907,735907,735907,735907,735907,735907,735908,735908,735908,735908,735908,735908,735910,735911,735912,735913,746929,746929,747540,755003,767168,775558,776656,794173,794175,807493), relation = c(111098,210749,176206,NA,NA,NA,NA,NA,NA,807493,NA,NA,735908,735910,735911,735912,735913,767168,735907,735910,735911,735912,735913,767168,NA,NA,NA,NA,NA,100723,NA,NA,NA,776656,775558,NA,NA,700689))
这将导致显示还显示孤立节点的图:
This should result in a plot that also shows isolated nodes:
v<-unique(data[,1])
e <- na.omit(data)
g<-graph.data.frame(e, vertices = v, directed = T)
plot(g)
由于某种原因,我收到错误消息:边缘列表中的某些顶点名称未在顶点数据框中列出".
For some reason I get the error: "Some vertex names in edge list are not listed in vertex data frame".
我希望有人可以告诉我我做错了什么以及如何解决此问题.谢谢
I hope someone can tell me what I am doing wrong and how to fix this. Thanks
paqmo回答了我的问题,谢谢!
paqmo answers my question, thank you!
但是我的任务需要其他方法.关系中但第一行中缺少的ID是位于不同位置的人员.在保留第一行中每个孤立的人的同时,应该省略这些内容.我为此的解决方案现在使用data.table:
However my task requires a different approach. IDs that are in relations, but are missing in the first row, are people in a different location. Those should be omitted, while maintaining every isolated person from the first row. My solution for this uses data.table for now:
v <- unique(c(data[,1]))
v <- as.data.frame(v)
e <- data
setDT(v);setDT(e)
setkey(v)
setkey(e, relation)
e <- e[v]
e <- na.omit(e)
g<-graph.data.frame(e, vertices = v, directed = T)
plot(g)
任何关于更好/更有效解决方案的建议都将受到欢迎.
any advice for a better/more efficient solution would be welcome.
推荐答案
您需要基于对象data
的都列来定义顶点列表.在第1列中有一些顶点,在第2列中有一些顶点.在第2列中缺少那些顶点.
You need to define your vertex list based on both columns of your object data
. Some vertices are in column 1, some in column 2. You are missing those in column 2.
您可以使用%in%
进行检查:
> c(e[,1], e[,2]) %in% v
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[19] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[37] FALSE TRUE TRUE TRUE
如您所见,e
中有2个元素不在v
中.这样一来,您会收到错误消息,提示内容不胜枚举.
As you can see, there are 2 elements of e
that are not in v
. Thus you get the error message that says as much.
通过获取data
中两列的唯一值减去NA来创建顶点列表v
.
Create the vertex list v
by taking the unique values of both columns in data
, less the NAs.
data <- data.frame(ID = c(143918,176206,210749,219170,
247818,314764,321459,335945,
339637,700689,712607,712946,
735907,735907,735907,735907,
735907,735907,735908,735908,
735908,735908,735908,735908,
735910,735911,735912,735913,
746929,746929,747540,755003,
767168,775558,776656,794173,
794175,807493),
relation = c(111098,210749,176206,
NA,NA,NA,NA,NA,NA,807493,
NA,NA,735908,735910,735911,
735912,735913,767168,735907,
735910,735911,735912,735913,
767168,NA,NA,NA,NA,NA,100723,
NA,NA,NA,776656,775558,NA,NA,700689))
v <- unique(c(data[,1], data[,2])) #Define v from both columns in data
v <- na.omit(v)
e <- na.omit(data)
g<-graph.data.frame(e, vertices = v, directed = T)
plot(g)
这篇关于创建具有隔离节点的igraph的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!