2014-12-11 3 views
0

귀하의 도움을 부탁드립니다. I는 하나 개 노호보다 유사한 데이터 구조를 가지고가중치 인접 행렬 igraph 및 R

ID Name 
    1  A 
    2  B 
    1  C 
    1  B 
    2  C 
    2  D 
    3  A 
    3  B 

은 "ID"열을 종이에 대한 고유 식별자이고, "이름"열에는 공동이있는 저자의 이름의 약자 종이. 나는 방향이없고 가중치가있는 인접 행렬을 생성해야합니다. 행렬의 노드 (또는 정점)는 "이름"열에 작성자 쌍 (ij)이됩니다. 행렬의 가중치 (ij, i ≠ j)는 예를 들어 설명 할 수있는 알고리즘을 사용하여 협업 비율의 합계로 표시됩니다.

예를 들어 위의 데이터에서 AB 쌍 종이 "1"과 "3"에서 두 가지 공동 작업을합니다. 또한, 논문 1에는 3 명의 협력자 (A, B, C)가있다. 제 3 신문에는 2 명의 공동 작업자 (A, B)가 있습니다. 노드 AB의 가중치는 A와 B가 함께 참여한 열 ID의 각 용지에 대해 반전 된 공동 작업자 수를 뺀 값의 합계입니다. 즉, A와 B는 종이 공동 경우 경우 분자가 존재할 것으로 무게 (AB) = (1/2) + (1) = (3/2)

        Paper 1   Paper 3 
        Collaborators A, B, C = 3  A, B = 2 
        Weight   1/(3 - 1)  1/(2 - 1) 

합계 알고리즘의 핵심은 "이름"열의 각 저자 쌍에 대해이 합계를 계산하고 무게가있는 인접성 매트릭스를 생성하는 것입니다.

귀하의 도움과 제안에 감사드립니다.

마리오.

답변

0

당신이 가지고있는 것은 두 부분으로 된 그래프이며, 그것의 일방적 인 투영이 필요합니다. 이것은 쉽습니다 :

## 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

친애하는 @Gabor Csardi, 나는 당신이 제시하고있는 것과 비슷한 인접성 매트릭스를 생성하는 다른 방법을 가지고 있습니다. 다음 명령을 사용하고 있습니다 : d <- data.frame (id = c (2,3,4,5,6,6,8,11,11,12,12,12), author = c ("FN", "VA", "FK", "VM", "SM", "FK", "FK", "VB", "VA", "FK", "VB" ")) –

+0

또한"m <- xtabs (~ author + id, d) "및"l <-tcrossprod (m) "을 사용했습니다. 이것은 인접성 매트릭스를 생성하지만, 제 문제는 각 종이에있는 공동 작업자 수의 반비례 한 비율을 뺀 합에 따라 각 쌍에 가중치를 부여해야한다는 것입니다. 예를 들어, 샘플 데이터에서 쌍 AB는 용지 1의 경우 1/(3-1), 용지 2의 경우 1/(2-1), 합계 3/2의 가중치를 가져야합니다. –