[英]Co-authorship network edge list for igraph R
我有一些与某些出版物有关的数据表,如下:
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。 我对网络没问题,但是我无法弄清楚如何从数据中获取边缘列表。 你能帮我吗?
您是否正在寻找这样的东西:
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)
我根据您的数据创建了一个邻接矩阵。
这是基于一些与tidyverse争吵的数据的解决方案。 作者之间的共同论文数在n
属性中存储为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")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.