从R中的专利数据创建边缘列表

时间:2015-10-08 20:30:33

标签: r

我正在尝试使用以下形式的专利数据创建边缘列表:

PatentID    InventorIDs    CoinventorIDs

1           A ; B           C,D,E ; F,G,H,C

2           J ; K ; L       M,O ; N ; P, Q

我想要的是下面的边缘清单,显示发明人和专利之间的联系。 (分号分隔与每个主发明人相关的共同发明者):

1  A  B
1  A  C
1  A  D
1  A  E
1  B  F
1  B  G
1  B  H
1  B  C
2  J  K
2  J  L
2  J  M
2  J  O
2  K  N
2  L  P
2  L  Q

使用R中的igraph有没有简单的方法呢?

1 个答案:

答案 0 :(得分:0)

我对inventorIds之间的边缘感到困惑。但是,这是一种蛮力函数,你可以按行applyigraph可能有一种方法,它是一个庞大的库,更好,但是一旦你有了这种形式的数据,转换为igraph数据结构应该很简单。

请注意,这忽略了主要发明者之间的边缘。

## A function to make the edges for each row
rowFunc <- function(row) {
    tmp <- lapply(row[2:3], strsplit, '\\s*;\\s*')
    tmp2 <- lapply(tmp[[2]], strsplit, ',')
    do.call(rbind, mapply(cbind, row[[1]], unlist(tmp[[1]]), unlist(tmp2, recursive=FALSE)))
}

## Apply the function by row
do.call(rbind, apply(dat, 1, rowFunc))
#      [,1] [,2] [,3]
#  [1,] "1"  "A"  "C" 
#  [2,] "1"  "A"  "D" 
#  [3,] "1"  "A"  "E" 
#  [4,] "1"  "B"  "F" 
#  [5,] "1"  "B"  "G" 
#  [6,] "1"  "B"  "H" 
#  [7,] "1"  "B"  "C" 
#  [8,] "2"  "J"  "M" 
#  [9,] "2"  "J"  "O" 
# [10,] "2"  "K"  "N" 
# [11,] "2"  "L"  "P" 
# [12,] "2"  "L"  " Q"