2014-12-18 41 views
3

我想为事件提示数据制作igraph的网络对象。网络:使用igraph从事件节点数据制作图形对象

例如,我有一个数据看起来像这样。

Event Person 
    1  Obama 
    1  Putin 
    1  Abe 
    1  Cameron 
    2  Putin 
    2  Xi 
    2  Merkel 
    3  Obama 
    3  Abe 
    3  Xi 
    3  Merkel 

我假设在同一事件中的每个人都有连接。根据这一数据,奥巴马和安倍晋三有两次联系,因为他们都在事件1和3中。

有了这些数据,奥巴马和普京就有了这个数据,我想计算程度/介乎度/亲密度中心度。为了计算这些中心位置,我需要一个图形对象。如何创建图形对象或邻接矩阵来计算三个中心度量?

我是最适合这个基本问题,对不起,我是新来的,使用R网络分析。

预先感谢您!

回答

3

假定你读你的数据到一个名为dd data.frame,你可以得到一个邻接矩阵与

X <- with(dd, table(Event, Person)) 
adj <- crossprod(X,X) 

#   Person 
# Person Abe Cameron Merkel Obama Putin Xi 
# Abe  2  1  1  2  1 1 
# Cameron 1  1  0  1  1 0 
# Merkel 1  0  2  1  1 2 
# Obama  2  1  1  2  1 1 
# Putin  1  1  1  1  2 1 
# Xi  1  0  2  1  1 2 

你对你要如何把它转换成一个图形对象几个选项,但你'd最有可能使用graph.adjacency。这里有一种方法

gg<-graph.adjacency(adj, mode="upper", weighted=TRUE, diag=FALSE); 
plot(gg, edge.width=E(gg)$weight) 

enter image description here

+0

这是一个很好的解决方案,但请注意,它不能缩放到大型稀疏图。 – 2014-12-19 04:32:14

6

这是一个二分图,和你想要的是它的投影。

txt <- "Event Person 
      1  Obama 
      1  Putin 
      1  Abe 
      1  Cameron 
      2  Putin 
      2  Xi 
      2  Merkel 
      3  Obama 
      3  Abe 
      3  Xi 
      3  Merkel 
" 

data <- read.table(textConnection(txt), header = TRUE) 
BG <- graph.data.frame(data, directed = FALSE) 
V(BG)$type <- grepl("^[0-9]+$", V(BG)$name) 

bipartite.projection(BG)[[1]] 
#> IGRAPH UNW- 6 13 -- 
#> + attr: name (v/c), weight (e/n) 
#> + edges (vertex names): 
#> [1] Obama--Putin Obama--Abe  Obama--Cameron Obama--Xi  Obama--Merkel 
#> [6] Putin--Abe  Putin--Cameron Putin--Xi  Putin--Merkel Abe --Cameron 
#> [11] Abe --Xi  Abe --Merkel Xi --Merkel 
相关问题