我恳请你帮忙。我有一个与下面类似的数据结构:
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。即,
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“中的每一对作者计算这个和,并生成一个加权邻接矩阵。
谢谢你的帮助和建议
马里奥。
发布于 2014-12-12 15:02:40
你有一个二分图,你需要它的单方投影。这很简单:
## 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 .https://stackoverflow.com/questions/27428027
复制相似问题