2017-02-24 5 views
1

Ich sammle Autoreninformationen und Artikelinformationen für einen Suchbegriff in PubMed. Ich erhalte den Namen des Autors, das Jahr der Veröffentlichung und andere Informationen erfolgreich unter Verwendung von entrez_fetch in rentrez Paket. mein Beispielcode folgend:PubMed XML-Parsing mit entrez_fetch in rentrez

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"]])}) 

Trotz all die Informationen immer ich brauchte, ich herauszufinden, welche Autoren ein Problem habe, für die PMID. Dies liegt daran, dass die Länge der Autoren für jede PMID unterschiedlich ist. Wenn ich zum Beispiel Autoreninformationen für 100 Artikel wie in meinem Code analysiert habe, erhalte ich mehr als 100 Autorennamen und kann sie nicht mit der entsprechenden PMID verknüpfen. Insgesamt würde Ich mag einen Ausgangsdatenrahmen wie diese haben:

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 

Also diese Weise würde ich wissen, welche Autoren zugeordnet sind, mit denen PMID und für die weitere Analyse nützlich.

Nur für den Hinweis, dies ist ein kleines Beispiel für meinen Code. Ich sammle mehr Informationen mit XML Parsing über entrez_fetch in rentrez Paket.

Dieses Problem nervt mich wirklich und ich würde wirklich jede Hilfe oder Anleitung schätzen. Vielen Dank für Ihre Bemühungen und Hilfe im Voraus.

Antwort

2

Das ist wirklich eine Frage über Xpath (die Sprache, die verwendet wird, um diese Knoten in einer XML-Datei anzugeben), die ich nicht als Experte bezeichnen möchte. Aber ich denke, dass ich in diesem Fall helfen kann.

Sie möchten sicherstellen, dass Sie Informationen für einen Pubmed-Datensatz (PubmedArticle-Eintrag) gleichzeitig extrahieren. Sie können eine Funktion schreiben, das für einen Datensatz

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) 
} 

Das sollten Sie eine Zeile pro Autor, mit dem gleichen pmid in jeder Zeile das tut. Wir können das nun auf den ganzen Artikel ausdehnen, indem wir diese Funktion für jeden Artikel aufrufen.

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 

BTW, ich in der Regel nicht Stackoverflow suchen, sondern Fragen zu rentrez als Fragen auf github repo eingereicht beantworten (sie müssen nicht „Fehler“ sein, dorthin zu gehen).

Verwandte Themen