簡體   English   中英

在R中使用有向邊生成圖形

[英]Building a Graph with Directed Edges in R

我有一個數據集,看起來像這樣:

PostID UserID ReplyTo
1      11     NA
2      12     1
3      11     2
4      13     NA
5      12     4

我想有一個有邊的有向圖:12-> 11,11-> 12,12-> 13

想法是,廣告End我能夠擁有一個UserID列表,並向其中添加不同的Centrality。

我嘗試的方式只能在PostID而非UserID之間生成圖形。

library(igraph)

D <- data.frame(Data$PostID, Data$ReplyTo)
FinalEdges<-D[complete.cases(D),]
FinalNetwork <- graph.data.frame(FinalEdges, directed = TRUE)


plot(FinalNetwork, vertex.label = V(FinalNetwork)$PostID) 

對於不同的中心,我使用:

DegreeCentrality<-degree(FinalNetwork)
ClosenessCentrality<-closeness(FinalNetwork)
BetweennessCentrality<-betweenness(FinalNetwork)
which i the would like to add to a list of users.

最后,我希望有一份用戶列表及其中心

UserID, DegreeCentrality, Closeness Centrality, BetweennessCentrality
11
12
13

您需要重塑輸入數據的形狀以連接線對。 如果這是您的樣本輸入數據

dd<-structure(list(PostID = 1:5, UserID = c(11L, 12L, 11L, 13L, 12L
), ReplyTo = c(NA, 1L, 2L, NA, 4L)), .Names = c("PostID", "UserID", 
"ReplyTo"), class = "data.frame", row.names = c(NA, -5L))

然后,您可以將回復與

 mm<-merge(dd, dd, by.x="ReplyTo", by.y="PostID")

這產生

  ReplyTo PostID UserID.x UserID.y ReplyTo
1       1      2       12       11      NA
2       2      3       11       12       1
3       4      5       12       13      NA

以及對ReplyIo列重復的警告。 但這不是真正的問題。 我們只需要兩個UserID列。 我們可以將它們變成圖表

library(igraph)
gg <- graph.data.frame(mm[,c("UserID.x","UserID.y")])

在此處輸入圖片說明

使用該對象,您應該能夠使用igraph庫計算所需的統計信息。

暫無
暫無

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

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