在R中构建带有定向边的图

时间:2014-08-14 15:31:54

标签: r igraph directed-graph

我的数据集看起来像这样:

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

我希望有一个带有边的有向图:12-> 11,11-> 12,12-> 13

这个想法就是广告我能够拥有一个UserID列表,我可以添加不同的中心。

我尝试的方式我只能在PostID之间生成图表,而不是用户ID。

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

1 个答案:

答案 0 :(得分:1)

您需要重新整形输入数据以连接对。如果这是您的样本输入数据

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")])

enter image description here

使用该对象,您应该能够使用igraph库来计算您想要的任何统计信息。