创建具有隔离节点的igraph [英] creating igraph with isolated nodes

查看:74
本文介绍了创建具有隔离节点的igraph的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对此有一个类似的问题:使用使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆