首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加权邻接矩阵i图与R

加权邻接矩阵i图与R
EN

Stack Overflow用户
提问于 2014-12-11 16:43:50
回答 1查看 625关注 0票数 0

我恳请你帮忙。我有一个与下面类似的数据结构:

代码语言:javascript
复制
  ID    Name
  1      A
  2      B
  1      C
  1      B
  2      C
  2      D
  3      A
  3      B 

"ID“列是论文的唯一标识符," name”列代表论文中有协作的作者的名称。我需要生成一个无向加权邻接矩阵。矩阵中的节点(或顶点)将是"Name“列中的作者对(ij)。矩阵(ij,i≠j)中的加权值将由协作比率之和给出,使用一个我可以用一个例子描述的算法:

例如,在上面的数据中,对and在论文"1“和"3”中有两个协作。此外,论文1有3个合作者(A,B,C);第3篇有2个合作者(A,B)。节点AB的权重为协作者倒排数的总和,减去A和B一起参与的ID列中的每一篇论文的1。即,

代码语言:javascript
复制
                                    Paper 1          Paper 3
                   Collaborators   A, B, C = 3      A, B = 2
                   Weight          1 / (3 - 1)     1 / (2 - 1)

重量之和(AB)= (1/2)+(1) = (3/2)

注意,如果A和B在一篇论文中合作,分子将是1,否则,算法的关键是为列"Name“中的每一对作者计算这个和,并生成一个加权邻接矩阵。

谢谢你的帮助和建议

马里奥。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-12 15:02:40

你有一个二分图,你需要它的单方投影。这很简单:

代码语言:javascript
复制
## Sample data
data <- "  ID    Name
  1      A
  2      B
  1      C
  1      B
  2      C
  2      D
  3      A
  3      B
"

## Read it in an edge list
el <- read.table(textConnection(data), header = TRUE)

## Create the bipartite graph from it
G <- graph.data.frame(el, directed = FALSE)
V(G)$type <- grepl("[0-9]+", V(G)$name)
G
#> IGRAPH UN-B 7 8 -- 
#> + attr: name (v/c), type (v/l)
#> + edges (vertex names):
#> [1] 1--A 2--B 1--C 1--B 2--C 2--D 3--A 3--B


## Project it to authors (and papers)
G_one <- bipartite.projection(G)

## You only need the authors
GA <- G_one[[1]]

## Create an adjacency matrix form it
GA[]
#> 4 x 4 sparse Matrix of class "dgCMatrix"
#>   A B C D
#> A . 2 1 .
#> B 2 . 2 1
#> C 1 2 . 1
#> D . 1 1 .
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27428027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档