我試圖提取pubmed摘要和它們的標題,并將它們放在一個資料框中。 在stackoverflow成員的幫助下,我能夠寫出下面的代碼,這很有效。現在的問題是abstracts變數的行數高于pmid或title的行數,因此我無法正確地合并它們。看一下我的xml檔案的結構,似乎摘要有不止一個節點,這就是為什么它們被提取在> 一行中。 有什么建議可以克服這個問題,把每個摘要放在一行里,這樣我就可以合并變數了。
以下是我的代碼:
library(XML)
library(httr)
library(glue)
library(dplyr)
####。
query = ' asthma[mesh] AND eosinophils[mesh] AND 2009[pdat] '
reqq = glue ('https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&RetMax=50& term={query}' )
op = GET(reqq)
content(op)
df_op <- op %>% xml2::read_xml() %>% xml2::as_list()
pmids <- df_op$eSearchResult$IdList %>% unlist(use.names = FALSE)
reqq1 = glue("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id={paste0(pmids, collapse = ',')}& rettype=abstract& retmode=xml")
op1 = GET(reqq1)
a = xmlParse(content(op1) )
pmidd = as.data. frame(xpathSApply(a, '/PubmedArticleSet/PubmedArticle/MedlineCitation/PMID', xmlValue))
title = as.data。 frame(xpathSApply(a, '/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/ArticleTitle' 。xmlValue))。
abstract = as.data. frame(xpathSApply(a, '/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Abstract/AbstractText' 。xmlValue))。
nrow(pmidd)
nrow(abstract)
uj5u.com熱心網友回復:
有些文章的摘要分布在幾個部分(目標、方法、....),有些只有一個條目,然后有些根本就沒有摘要。你必須照顧到所有這些不同的情況。
xml::xmlToList()可以用來從xml資料中提取一個串列。然后我們可以使用purrr的map*()命令來平整資料。
library(purrr)
b <- xmlToList(a)
res <- map_dfr(b, (x) {
abstract_l <- x$MedlineCitation$Article$Abstract。
if (is.null(abstract_l))
abstract_l <- ""
tibble(
pmid = x$MedlineCitation$PMID$text,
title = x$MedlineCitation$Article$ArticleTitle。
抽象 = ifelse(
length(abstract_l) >/span> 1,
map_chr(abstract_l, (y) y[[1]]) |> paste(collapse = ")
")。)
unlist(abstract_l)
)
)
})
res$abstract[/span
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324059.html
標籤:
