R 如何从已发表论文列表中确定作者共现

R 如何从已发表论文列表中确定作者共现,r,R,我想看看我是否能想象出某一主题的同行评议期刊上谁与谁一起发表文章。为此,我在pubmed中键入了关键字“Barrett's”,并下载了一个大文件,其中有两列,Title和Author structure(list(Title = structure(c(1L, 4L, 3L, 2L, 5L), .Label = c("A case of Barrett's adenocarcinoma with marked endoscopic morphological changes in Barrett

我想看看我是否能想象出某一主题的同行评议期刊上谁与谁一起发表文章。为此,我在pubmed中键入了关键字“Barrett's”,并下载了一个大文件,其中有两列,
Title
Author

structure(list(Title = structure(c(1L, 4L, 3L, 2L, 5L), .Label = c("A case of Barrett's adenocarcinoma with marked endoscopic morphological changes in Barrett's esophagus over a long follow-up period of 15\xe4\xf3\x8ayears.", 
"APE1-mediated DNA damage repair provides survival advantage for esophageal adenocarcinoma cells in response to acidic bile salts.", 
"Healthcare Cost of Over-Diagnosis of Low-Grade Dysplasia in Barrett's Esophagus.", 
"Radiofrequency ablation coupled with Roux-en-Y gastric bypass: a treatment option for morbidly obese patients with Barrett's esophagus.", 
"Risk factors for Barrett's esophagus."), class = "factor"), 
    Author = structure(c(3L, 5L, 4L, 2L, 1L), .Label = c("Arora Z, Garber A, Thota PN.", 
    "Hong J, Chen Z, Peng D, Zaika A, Revetta F, Washington MK, Belkhiri A, El-Rifai W.", 
    "Iwaya Y, Yamazaki T, Watanabe T, Seki A, Ochi Y, Hara E, Arakura N, Tanaka E, Hasebe O.", 
    "Lash RH, Deas TM Jr, Wians FH Jr.", "Parikh K, Khaitan L."
    ), class = "factor")), .Names = c("Title", "Author"), row.names = c(NA, 
5L), class = "data.frame")
我想数一数一位作者与另一位作者发表了多少次。我认为最好的方法是创建一个共现矩阵(稍后我将使用igraph)

我在理解如何将数据转换成这样的矩阵时遇到了一些问题。我猜这将涉及将所有作者列为列名和行名,然后遍历Auth数据帧的每一行,并在矩阵中记录两个名称的同时出现。有没有一个快速的方法可以做到这一点。我不知道如何处理这个问题。所以我试了一下:

1.Extract all the names into a long list from the Author column
2.Then create colnames from the Author list
3.Then create rownames from the Author list
4.Then somehow iterate through Auth[2] and count the name co-occurrence
…但我在第一次拔牙时就卡住了:

AuthSplit<-strsplit(Auth$Author, ",", fixed=T)
AuthSplit<-as.data.frame(AuthSplit)

一定有更简单的方法吗?

如果有大量作者,邻接矩阵可能会非常大。相反,您可以创建一个作者对列表,
igraph
可以用来创建图形。基本方法是为每篇论文形成一个单独作者的向量列表,然后为每篇论文创建一个作者对的数据框架,只保留第一作者按字母顺序排在第二作者之前的那些作者。然后将每张图纸的数据帧列表合并为一个更大的数据帧。形成具有唯一作者对和每个作者对的论文数量的数据框架。此数据框用于创建一个图形,其中纸张计数存储在带有边缘定义的图形中。此计数可以显示在图形的绘图上

我在你的列表中添加了几篇文章,其中包括同一作者出现在多篇论文中,而同一对作者出现在多篇论文中的情况。代码看起来像

library(igraph)
#  add papers with authors from previous papers
  Auth <- rbind(Auth, 
              data.frame(Title=c("Paper A","Paper B"), 
                         Author=c("Iwaya Y, Parikh K, Lash RH", "Wians FH Jr., Lash RH")))

# create list of individual authors for each paper
  pub_auths <- sapply(Auth$Author, function(x) strsplit(as.character(x), split=","))
  pub_auths <- lapply(pub_auths, trimws)
# for each paper, form a data frame of unique author pairs 
  auth_pairs <- lapply(pub_auths, function(x) { z  <-  expand.grid(x, x, stringsAsFactors=FALSE);
                                        z[z$Var1 < z$Var2,]   })
# combine list of matrices for each paper into one data frame
  auth_pairs <- do.call(rbind, auth_pairs)
# count papers for each author pair
  auth_count <- aggregate( paste(Var1, Var2)  ~ Var1 + Var2 , data=auth_pairs, length)
  colnames(auth_count) <- c("Author1","Author2","Paper_count")
# create graph from author pairs
  g <- graph_from_data_frame(auth_count, directed=FALSE)
# plot graph
   plot(g, edge.label=E(g)$Paper_count, edge.label.cex=1.4, vertex.label.cex=1.4)
库(igraph)
#添加包含以前论文作者的论文

Auth如果有大量作者,则邻接矩阵可能相当大。相反,您可以创建一个作者对列表,
igraph
可以用来创建图形。基本方法是为每篇论文形成一个单独作者的向量列表,然后为每篇论文创建一个作者对的数据框架,只保留第一作者按字母顺序排在第二作者之前的那些作者。然后将每张图纸的数据帧列表合并为一个更大的数据帧。形成具有唯一作者对和每个作者对的论文数量的数据框架。此数据框用于创建一个图形,其中纸张计数存储在带有边缘定义的图形中。此计数可以显示在图形的绘图上

我在你的列表中添加了几篇文章,其中包括同一作者出现在多篇论文中,而同一对作者出现在多篇论文中的情况。代码看起来像

library(igraph)
#  add papers with authors from previous papers
  Auth <- rbind(Auth, 
              data.frame(Title=c("Paper A","Paper B"), 
                         Author=c("Iwaya Y, Parikh K, Lash RH", "Wians FH Jr., Lash RH")))

# create list of individual authors for each paper
  pub_auths <- sapply(Auth$Author, function(x) strsplit(as.character(x), split=","))
  pub_auths <- lapply(pub_auths, trimws)
# for each paper, form a data frame of unique author pairs 
  auth_pairs <- lapply(pub_auths, function(x) { z  <-  expand.grid(x, x, stringsAsFactors=FALSE);
                                        z[z$Var1 < z$Var2,]   })
# combine list of matrices for each paper into one data frame
  auth_pairs <- do.call(rbind, auth_pairs)
# count papers for each author pair
  auth_count <- aggregate( paste(Var1, Var2)  ~ Var1 + Var2 , data=auth_pairs, length)
  colnames(auth_count) <- c("Author1","Author2","Paper_count")
# create graph from author pairs
  g <- graph_from_data_frame(auth_count, directed=FALSE)
# plot graph
   plot(g, edge.label=E(g)$Paper_count, edge.label.cex=1.4, vertex.label.cex=1.4)
库(igraph)
#添加包含以前论文作者的论文

Auth-See
crossprod(table(rep(seq_-along(AuthSplit)),length(AuthSplit)),unlist(AuthSplit))
OK这给了我一个奇怪的错误:在最近的R版本中引入了找不到函数“length”
length
;它本质上是sappy(AuthSplit,length)
crossprod(table(rep(seq_-along(AuthSplit)),length(AuthSplit)),unlist(AuthSplit))
OK这给了我一个奇怪的错误:在最近的R版本中引入了找不到函数“length”
length
;它本质上是sappy(AuthSplit,length)
。好的。我喜欢这种方法。我犯了几个错误。首先,我在strsplit中得到了错误(如.character(x),split=“,”):当我运行pub_auths时,输入字符串1在此区域中无效。区域设置取决于R
locale
设置和O/S。在Windows 8.1上,我的区域设置是
English_United.1252
<代码>C可能与此相近。很高兴这对你有用
trimws
以及
Length
(来自您之前的评论)是R版本3.2.0中引入的新功能。如果可能的话,你可以考虑更新你的版本。我用的是3.2.3。今天早上刚刚发布了新版本3.2.4。对于
aggregate
,您可以查看
auth\u pairs
来验证它是否正常。备选代码为
auth\u list OK。我把它分类了。通过改变函数的格式,我修复了一些聚合函数的奇怪之处。我编辑了你的代码。现在它工作得很好。谢谢好啊我喜欢这种方法。我犯了几个错误。首先,我在strsplit中得到了错误(如.character(x),split=“,”):当我运行pub_auths时,输入字符串1在此区域中无效。区域设置取决于R
locale
设置和O/S。在Windows 8.1上,我的区域设置是
English_United.1252
<代码>C
可能与此相近。很高兴这对你有用
trimws
以及
Length
(来自您之前的评论)是R版本3.2.0中引入的新功能。如果可能的话,你可以考虑更新你的版本。我用的是3.2.3。今天早上刚刚发布了新版本3.2.4。对于
aggregate
,您可以查看
auth\u pairs
来验证它是否正常。备选代码为
auth\u list OK。我把它分类了。通过改变函数的格式,我修复了一些聚合函数的奇怪之处。我编辑了你的代码。现在它工作得很好。谢谢