【问题标题】:Co-authorship network edge list for igraph Rigraph R 的合着网络边缘列表
【发布时间】:2018-11-04 15:33:10
【问题描述】:

我有一个与一些出版物相关的数据表,如下所示:

PubID   Author
169759  ZJ
174843  RA
174843  DJ
174843  JP
174843  GS
174843  Tv
171051  MC
171051  JR
171051  CW
171719  PB
171719  MD
171719  FO
169759  FO
173847  RA
173847  DJ

并希望将其转换为边缘列表以输入 igraph 以显示共同作者网络(例如,RA 和 DJ 有两篇论文)。我总共有大约 7000 个 ID。我对网络位没问题,但我就是不知道如何从数据中获取边缘列表。你能帮我吗?

【问题讨论】:

  • 请指定您使用哪个包来实现此目的。
  • 我正在通过 RStudio 使用 R,并将使用 igraph 进行网络分析。文献计量数据来自上述格式的内部系统。

标签: r matrix networking igraph adjacency-matrix


【解决方案1】:

你在寻找这样的东西吗:

library(igraph)


PubID <- c("169759","174843","174843","174843","174843","174843","171051","171051","171051","171719","171719","171719","169759","173847","173847")
Author <- c("ZJ","RA","DJ","JP","GS","Tv","MC","JR","CW","PB","MD","FO","FO","RA","DJ")
dt <- data.frame(Author,PubID)
levs <- unique(unlist(dt, use.names = FALSE))
adj <- table(lapply(dt, factor, levs))
g1 <- graph_from_adjacency_matrix( adj )
plot(g1)

我根据您的数据创建了一个邻接矩阵。

【讨论】:

  • 是的,非常相似,但我不希望将 pub ID 作为节点包含在内,我只希望作者之间的链接根据他们共有多少篇论文进行加权 - 在不转换数据的情况下是否可能?
【解决方案2】:

这是一个基于一些数据与 tidyverse 争论的解决方案。作者之间的共同论文数量在边缘属性中存储为n

PubID <- c("169759","174843","174843","174843","174843","174843","171051","171051","171051","171719","171719","171719","169759","173847","173847") Author <- c("ZJ","RA","DJ","JP","GS","Tv","MC","JR","CW","PB","MD","FO","FO","RA","DJ") dt <- data.frame(Author,PubID) library(tidyverse) library(igraph) dt %>% mutate(author_id = as.integer(Author)) -> dt dt %>% inner_join(dt, by = "PubID") %>% filter(author_id.x < author_id.y) %>% count(Author.x, Author.y) %>% graph_from_data_frame(directed = FALSE) -> g1 plot(g1) as_data_frame(g1, what = "edges")

【讨论】:

  • 您可能不需要将作者 ID 转换为整数。一个鲜为人知的事实是 R 比较运算符适用于字符(通过字典顺序):"aa" &lt; "ab" 给出TRUE
  • 在这种情况下,作者是因素而不是人物。然后就不行了。
  • 当然,所以只需使用 tibble 或stringsAsFactors = FALSE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
相关资源
最近更新 更多