簡體   English   中英

創建具有隔離節點的igraph

[英]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)

任何關於更好/更有效解決方案的建議都將受到歡迎。

似乎您嘗試兩次提供頂點名稱,即一次提供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)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM