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
my data
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
EDIT:
paqmo answers my question, thank you!
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.
See Question&Answers more detail:
os