[英]creating igraph with isolated nodes
我對此有一個類似的問題: 使用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)
由於某種原因,我收到錯誤消息:“邊緣列表中的某些頂點名稱未在頂點數據框中列出”。
我希望有人能告訴我我做錯了什么以及如何解決此問題。 謝謝
編輯: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)
任何關於更好/更有效解決方案的建議都將受到歡迎。
您需要根據對象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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.