首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rentrez中使用entrez_fetch解析PubMed

在rentrez中使用entrez_fetch解析PubMed
EN

Stack Overflow用户
提问于 2017-02-24 11:59:14
回答 1查看 532关注 0票数 1

我正在为PubMed中的搜索词收集作者信息和文章信息。我正在使用rentrez包中的entrez_fetch成功地获取作者姓名、出版年份和其他信息。以下是我的示例代码:

代码语言:javascript
复制
library(rentrez)
library(XML)

pubmedSearch <- entrez_search("pubmed", term = "flexible ureteroscope", retmax = 100)
SearchResults <- entrez_fetch(db="pubmed", pubmedSearch$ids, rettype="xml", parsed=TRUE)
First_Name <- xpathSApply(SearchResults, "//Author", function(x) {xmlValue(x[["ForeName"]])})
Last_Name <- xpathSApply(SearchResults, "//Author", function(x) {xmlValue(x[["LastName"]])})
PubYear <- xpathSApply(SearchResults, "//PubDate", function(x) {xmlValue(x[["Year"]])})
PMID <- xpathSApply(SearchResults, "//ArticleIdList", function(x) {xmlValue(x[["ArticleId"]])})

尽管我得到了我需要的所有信息,但我在弄清楚哪些作者属于哪个PMID时遇到了问题。这是因为每个PMID的作者长度不同。例如,如果我像在我的代码中那样解析100篇文章的作者信息,我会得到100多个作者的名字,并且我不能将其与各自的PMID相关联。总而言之,我希望有一个这样的输出数据框:

代码语言:javascript
复制
 PMID       First_Name   Last_Name          PubYear
 28221147   Carlos      Torrecilla Ortiz    2017
 28221147   Sergi       Colom Feixas        2017
 28208536   Dean G      Assimos             2017
 28203551   Chad M      Gridley             2017
 28203551   Bodo E      Knudsen             2017

因此,通过这种方式,我可以知道哪些作者与哪个PMID相关联,这对进一步分析很有用。

仅供说明,这是我的代码的一个小示例。我正在通过rentrez包中的entrez_fetch使用XML解析来收集更多信息。

这个问题真的很困扰我,我真的很感激任何帮助或指导。提前感谢您的努力和帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-26 12:29:39

这实际上是一个关于xpath (用于在XML文件中指定那些节点的语言)的问题,我并不是这方面的专家。但我想我能帮上忙。

您希望确保一次提取一条发布记录(PubmedArticle条目)的信息。您可以为一条记录编写一个执行此操作的函数

代码语言:javascript
复制
parse_paper <- function(paper){
  last_names <- xpathSApply(paper, ".//Author/LastName", xmlValue)
  first_names <- xpathSApply(paper, ".//Author/ForeName", xmlValue)
  pmid <- xpathSApply(paper, ".//ArticleId[@IdType='pubmed']", xmlValue)
  data.frame(pmid=pmid, last_names=last_names, first_names=first_names)
}

这应该为每个作者提供一行,每行中都有相同的pmid。现在,我们可以通过在每篇文章上调用该函数来将其扩展到整篇文章。

代码语言:javascript
复制
parse_multiple_papers <- function(papers){
  res <- xpathApply(papers, "/PubmedArticleSet/*", parse_paper)
  do.call(rbind.data.frame, res)
}

head(parse_multiple_papers(SearchResults))

代码语言:javascript
复制
      pmid       last_names first_names
1 28221147 Torrecilla Ortiz      Carlos
2 28221147     Colom Feixas       Sergi
3 28208536          Assimos      Dean G
4 28203551          Gridley      Chad M
5 28203551          Knudsen      Bodo E
6 28101159               Li    Zhi-Gang

顺便说一句,我通常不会搜索堆栈溢出,但我会回答任何在github repo上作为问题提交的关于rentrez的问题(它们不一定是“but”)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42430519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档