【问题标题】:Create an edge list from co-authership network in R从 R 中的共同授权网络创建边缘列表
【发布时间】:2014-06-12 04:43:38
【问题描述】:

我正在尝试使用 igraph 为共同作者网络分析项目创建一个边缘列表。我的数据存储方式是特定论文的每个作者都按行收听,这意味着每篇论文都是一个观察结果,列包含该论文的作者。

是否可以使用 combn 函数为每篇论文中的每个作者组合创建边缘列表?

【问题讨论】:

  • 你为什么认为这是不可能的?你试过什么?请编辑您的问题以包含示例输入和所需的输出,或描述您在使用自己的代码时遇到的问题(为什么您得到的结果不是您想要的)。

标签: r igraph edges sna


【解决方案1】:

我想你必须一个一个地做,但你可以使用 do.call('c',...) 把它们放在一起

library(utils)


## original data as a list
data.in  = list(c(1,2,3),c(4,5),c(3),c(1,4,6))

## function that makes all pairs
f.pair.up <- function(x) {
n = length(x)
if (n<2) {
  res <- NULL
} else {
  q <- combn(n,2)
  x2 <- x[q]
  #dim(x2) <- dim(q)
  res <- x2
}
return(res)
}

## for each paper create all author pairs (as a flat vector)
data.pairs.bypaper = lapply(data.in,f.pair.up)

## remove papers that contribute no edges
data.pairs.noedge = sapply(data.pairs.bypaper,is.null)
data.pairs2.bypaper <- data.pairs.bypaper[!data.pairs.noedge]

## combine all 'subgraphs'
data.pairs.all <- do.call('c',data.pairs2.bypaper)

## how many authors are there?
n.authors <- length(unique(data.pairs.all))

## make a graph
my.graph = graph(data.pairs.all,directed=FALSE,n=n.authors)

## plot it
tkplot(my.graph)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2012-10-23
    相关资源
    最近更新 更多