我想从事件记录数据中为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
我假设同一事件中的每个人都有联系。奥巴马,普京,安倍和卡梅伦都有联系,因为他们都参加了比赛。基于这些数据,奥巴马和安倍有两次联系,因为他们都参加了第一场和第三场比赛。
有了这些数据,我想计算度数/中介/亲密度中心性。要计算这些中心点,我需要有一个图形对象。如何创建图形对象或邻接矩阵来计算三个中心度量?
我很抱歉这个基本问题,但我不熟悉使用R进行网络分析。
提前谢谢!
答案 0 :(得分: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
答案 1 :(得分: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
关于如何将其转换为图表对象,您有几个选项,但您最有可能使用graph.adjacency
。这是一种方式
gg<-graph.adjacency(adj, mode="upper", weighted=TRUE, diag=FALSE);
plot(gg, edge.width=E(gg)$weight)