我正在为PubMed中的搜索词收集作者信息和文章信息。我正在使用rentrez包中的entrez_fetch成功地获取作者姓名、出版年份和其他信息。以下是我的示例代码:
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相关联。总而言之,我希望有一个这样的输出数据框:
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解析来收集更多信息。
这个问题真的很困扰我,我真的很感激任何帮助或指导。提前感谢您的努力和帮助。
发布于 2017-02-26 12:29:39
这实际上是一个关于xpath (用于在XML文件中指定那些节点的语言)的问题,我并不是这方面的专家。但我想我能帮上忙。
您希望确保一次提取一条发布记录(PubmedArticle条目)的信息。您可以为一条记录编写一个执行此操作的函数
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。现在,我们可以通过在每篇文章上调用该函数来将其扩展到整篇文章。
parse_multiple_papers <- function(papers){
res <- xpathApply(papers, "/PubmedArticleSet/*", parse_paper)
do.call(rbind.data.frame, res)
}
head(parse_multiple_papers(SearchResults))。
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”)。
https://stackoverflow.com/questions/42430519
复制相似问题