-1

我正在使用 R 和 igraph 库中的特征向量中心性算法。我们有以下 sql 表:

person1 / person2 / score

A / B / 0.568

A / C / 1.233

B / A / 0.798

B / C / 0.493

C / A / 1.367

C / B / 1.276

这些值是两个人之间关系的分数。

两个问题: - 如何从上表中以分数为权重在 R 中创建矩阵? 结果

Person   A       B     C 
A        -     0.568  1.233
B      0.798     -    0.493
C     1.367    1.276   -
  • 我们如何考虑关系的权重以在 R 中应用特征向量中心性算法?
4

2 回答 2

2

要在计算特征向量中心性时应用边权重,只需使用以下weights选项引用权重eigen_centrality

rm(list=ls())

library(igraph)

# Some sample data, source: http://www.shizukalab.com/toolkits/sna/weighted-edgelists
el <- structure(list(V1 = c(23732L, 23732L, 23778L, 23778L, 23871L, 
23871L, 23871L, 58009L, 58098L, 58256L), V2 = c(23871L, 58098L, 
23732L, 23824L, 23778L, 58009L, 58098L, 58098L, 23778L, 58098L
), weight = c(1L, 10L, 8L, 1L, 15L, 1L, 5L, 7L, 1L, 1L)), .Names = c("V1", 
"V2", "weight"), class = "data.frame", row.names = c(NA, -10L
))

g <- graph.data.frame(el)

# Only showing the centrality scores, hence the $vector
eigen_centrality(g, directed=TRUE, weights=E(g)$weight)$vector

#     23732      23778      23871      58009      58098      58256      23824 
# 0.53685043 0.39782138 0.09055835 0.01527579 1.00000000 0.00000000 0.06710630 

要获得权重的邻接矩阵:

get.adjacency(g, attr='weight')
于 2016-08-29T14:32:56.723 回答
1

通过创建一个新矩阵,按人 1 和 2 命名行和列,然后将值分配到正确的位置,这只是一种快速而肮脏的方式。我们使用了两个对新用户没有充分讨论的 R 技巧。

1)您可以通过名称提取对象的元素。

2)您可以使用两列矩阵进行子集化。

p1 <- sort(unique(df$person1))
p2 <- sort(unique(df$person2))
mat <- matrix(0, length(p1), length(p2))
rownames(mat) <- p1
colnames(mat) <- p2
mat[as.matrix(df[1:2])] <- df$score
mat
#        A     B     C 
# A  0.000 0.568 1.233
# B  0.798 0.000 0.493
# C  1.367 1.276 0.000
于 2016-08-29T14:25:04.110 回答