使用孤立节点创建 igraph
creating igraph with isolated nodes
我有一个类似的问题:Reading adjacency lists with isolated nodes using igraph
我想绘制一些没有关系的节点。但是由于某种原因,上面线程中提到的解决方案不起作用
我的数据
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(data[,1])
e <- na.omit(data)
g<-graph.data.frame(e, vertices = v, directed = T)
plot(g)
出于某种原因,我得到了错误:"Some vertex names in edge list are not listed in vertex data frame"。
我希望有人能告诉我我做错了什么以及如何解决这个问题。谢谢
编辑:
paqmo 回答了我的问题,谢谢!
但是我的任务需要不同的方法。在关系中但在第一行中丢失的 ID 是位于不同位置的人。那些应该被省略,同时保留第一行的每个孤立的人。我的解决方案现在使用 data.table:
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)
任何关于 better/more 有效解决方案的建议都将受到欢迎。
您似乎在尝试提供两次顶点名称,即一次用于 e
中的第一列,然后再次作为参数 vertices = v
。
也许您真正要找的只是
g <- graph.data.frame(e, directed = T)
plot(g)
您需要根据对象 data
的 列定义顶点列表。一些顶点在第 1 列中,一些在第 2 列中。您缺少第 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
中。因此,您会收到同样多的错误消息。
通过取 data
中两列的唯一值,减去 NA,创建顶点列表 v
。
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)
我有一个类似的问题:Reading adjacency lists with isolated nodes using igraph
我想绘制一些没有关系的节点。但是由于某种原因,上面线程中提到的解决方案不起作用
我的数据
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(data[,1])
e <- na.omit(data)
g<-graph.data.frame(e, vertices = v, directed = T)
plot(g)
出于某种原因,我得到了错误:"Some vertex names in edge list are not listed in vertex data frame"。
我希望有人能告诉我我做错了什么以及如何解决这个问题。谢谢
编辑: paqmo 回答了我的问题,谢谢!
但是我的任务需要不同的方法。在关系中但在第一行中丢失的 ID 是位于不同位置的人。那些应该被省略,同时保留第一行的每个孤立的人。我的解决方案现在使用 data.table:
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)
任何关于 better/more 有效解决方案的建议都将受到欢迎。
您似乎在尝试提供两次顶点名称,即一次用于 e
中的第一列,然后再次作为参数 vertices = v
。
也许您真正要找的只是
g <- graph.data.frame(e, directed = T)
plot(g)
您需要根据对象 data
的 列定义顶点列表。一些顶点在第 1 列中,一些在第 2 列中。您缺少第 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
中。因此,您会收到同样多的错误消息。
通过取 data
中两列的唯一值,减去 NA,创建顶点列表 v
。
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)