Использованиеrentrez для анализа автора и принадлежности из pubmed

Моя общая цель — построить сетевой граф соавторов. У меня есть список идентификаторов PubMed, и это единственные публикации, которые меня интересуют для построения графика сети соавторов. Я не могу понять, как получить имена авторов и соответствующие аффилиации вместе в моем запросе с помощью rentrez. Я могу получить обе информации, но мой список аффилиаций примерно на 300 меньше, чем мой список авторов, поэтому очевидно, что некоторые не указали аффилированность, но я не могу понять, кто. Есть ли способ искать автора и принадлежность вместе? [Когда я сделал и то, и другое в своем entrez_fetch, он просто дал мне список авторов и аффилиаций отдельно, поэтому я до сих пор не могу понять, какая аффилиация принадлежит каким авторам.]

library(tidyverse)
library(rentrez)
library(XML)

trial<-entrez_fetch(db="pubmed", id=pub.list$PMID, rettype="xml", parsed=TRUE)
affiliations<-xpathSApply(trial, "//Affiliation", xmlValue)
first.names<-xpathSApply(trial, "//Author/ForeName", xmlValue)

Все это прекрасно работает, но я не могу понять, какие авторы с какими связями связаны, поскольку их длина различна.

Любая помощь будет принята с благодарностью. Спасибо!


person Shirley    schedule 22.02.2017    source источник
comment
Попробуйте xmlToDataFrame(trial["//Author"])   -  person Chris S.    schedule 22.02.2017


Ответы (3)


Вы можете попробовать что-то вроде:

xpathSApply(trial, "//Author", function(x) {
  author_name <- xmlValue(x[["LastName"]])
  author_affiliation <- xmlValue(x[["AffiliationInfo"]][["Affiliation"]])
  c(author_name,author_affiliation)
  })

Он возвращает в первой строке фамилии авторов, а во второй строке их принадлежность, получая эти значения для каждого узла //Author.

person NicE    schedule 22.02.2017
comment
Благодарю вас! Когда я запустил код, как вы его написали, я получил странный формат, в котором отображались только числа. Я разделил код на 2 части (одну для авторов и одну для аффилиаций, используя тот же формат, что и у вас), а затем объединил их, и на этот раз он показывает, где появляются NA для аффилиаций! - person Shirley; 22.02.2017
comment
Отлично, на выходе есть матрица. Если вам нужен более читаемый формат, вы можете сохранить матрицу в переменной, например данные, а затем выполнить as.data.frame(t(data)), чтобы получить ее как фрейм данных с одним автором в строке, а в первом столбце - фамилию и принадлежность в второй. - person NicE; 22.02.2017

last.name<-xpathSApply(trial, "//Author", function(x) {
  author_name <- xmlValue(x[["LastName"]])})

affiliation<-xpathSApply(trial, "//Author", function(x) {
  author_affiliation <- xmlValue(x[["AffiliationInfo"]][["Affiliation"]])})

Это то, что я в конечном итоге использовал, следуя формату NicE, и это сработало - я вижу, где сейчас находятся АН для аффилиаций.

person Shirley    schedule 22.02.2017

Я взял код @NicE и комментарии @Shirley и написал этот код:

lastname_affiliation <-data.frame(cbind(
    xpathSApply(trial, "//Author", function(x) {
        author_name <- xmlValue(x[["LastName"]])
    }), 
    xpathSApply(trial, "//Author", function(x) {
        author_affiliation <- xmlValue(x[["AffiliationInfo"]][["Affiliation"]])
    })
))

Спасибо, что поставили меня на правильный путь.

person Josh    schedule 14.07.2018