JournalAnalysis matches Europe PMC articles to journal-level metrics from Scimago or InCites (JCR). This tutorial walks through a typical workflow: define a search, retrieve and inspect results, summarize abstracts, rank journals, and export a shortlist.
Load JournalAnalysis and dplyr for the filtering steps later in the tutorial.
Europe PMC queries use the same boolean syntax as the website search box. You can pass one query or combine several; multiple queries are unioned before filtering.
JournalAnalysis also ships example query strings you can adapt:
query3
#> [1] "microbiome AND (psychiatry OR psychology OR neuroscience) AND (rhesus OR macaque or human or stress or monkey) AND (NOT ecology)"For this tutorial we use query3, which targets
microbiome papers in psychiatry, psychology, and neuroscience-related
contexts while excluding ecology papers.
See the Europe PMC search help for field names and operators.
get_publication_data() is the main entry point. It:
scimago or
incities (InCites / JCR)Start with a modest limit while you refine the
query:
pub_data <- get_publication_data(
journal_source = "scimago",
queries = query3,
limit = 200,
min_year = 2015,
min_citations = 3,
n_cores = 1
)
#> 30872 records found, returning 200
#> Removed records published before 2015.
#> Removed records with less than 3 citations.
#> Removed records with NA values for pmid, doi, and authors.
#> 23 records passed the filter.
length(pub_data)
#> [1] 3
names(pub_data)
#> [1] "journals" "articles" "combined"
vapply(pub_data, nrow, integer(1))
#> journals articles combined
#> 23 23 23The returned list has three elements:
| Element | Description |
|---|---|
pub_data$articles |
Article metadata from Europe PMC |
pub_data$journals |
Journal metrics for matched ISSNs |
pub_data$combined |
Articles joined to journal metadata |
After retrieval, inspect each list element to confirm the query and filters behaved as expected.
dplyr::glimpse(pub_data$articles)
#> Rows: 23
#> Columns: 30
#> $ id <chr> "40930373", "41463035", "41490486", "41077197", …
#> $ source <chr> "MED", "MED", "MED", "MED", "MED", "MED", "MED",…
#> $ pmid <chr> "40930373", "41463035", "41490486", "41077197", …
#> $ pmcid <chr> "PMC12911324", "PMC12730554", "PMC12799112", "PM…
#> $ doi <chr> "10.1016/j.biopsych.2025.08.020", "10.3390/biome…
#> $ title <chr> "RNA in Plasma Extracellular Vesicles of Adolesc…
#> $ authorString <chr> "Korobkova L, Thornton ME, Collin MA, Morin EL, …
#> $ journalTitle <chr> "Biol Psychiatry", "Biomedicines", "Proc Natl Ac…
#> $ journalVolume <chr> "100", "13", "123", "91", "70", "195", "21", "17…
#> $ pubYear <int> 2026, 2025, 2026, 2025, 2025, 2025, 2025, 2025, …
#> $ journalIssn <chr> "00063223; 18732402;", "22279059", "00278424; 10…
#> $ pageInfo <chr> "64-75", "3025", "e2426232122", "106626", "227-2…
#> $ pubType <chr> "research-article; journal article", "review-art…
#> $ isOpenAccess <chr> "N", "Y", "Y", "Y", "Y", "N", "Y", "Y", "Y", "Y"…
#> $ inEPMC <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y"…
#> $ inPMC <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y"…
#> $ citedByCount <dbl> 3, 6, 3, 3, 3, 3, 16, 3, 5, 8, 9, 35, 5, 5, 3, 1…
#> $ hasReferences <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y"…
#> $ hasTextMinedTerms <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y"…
#> $ hasDbCrossReferences <chr> "N", "N", "Y", "N", "N", "N", "N", "N", "N", "N"…
#> $ hasPDF <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y"…
#> $ hasBook <chr> "N", "N", "N", "N", "N", "N", "N", "N", "N", "N"…
#> $ hasSuppl <chr> "Y", "N", "Y", "Y", "N", "Y", "Y", "Y", "N", "N"…
#> $ hasLabsLinks <chr> "N", "N", "Y", "Y", "N", "Y", "Y", "Y", "N", "Y"…
#> $ hasTMAccessionNumbers <chr> "Y", "Y", "N", "Y", "Y", "Y", "Y", "Y", "Y", "Y"…
#> $ firstPublicationDate <chr> "2025-09-08", "2025-12-10", "2026-01-05", "2025-…
#> $ firstIndexDate <chr> "2025-09-12", "2026-01-02", "2026-01-06", "2025-…
#> $ issue <chr> "1", "12", "2", "5", "7", "4", "5", "1", "3", "1…
#> $ ISSN.1 <chr> "00063223", "22279059", "00278424", "01634453", …
#> $ ISSN.2 <chr> "18732402;", "", "10916490;", "15322742;", "1805…
dplyr::glimpse(pub_data$journals)
#> Rows: 23
#> Columns: 28
#> $ Rank <int> 115, 306, 349, 522, 626, 1023, 1213, 1215, 1…
#> $ Sourceid <dbl> 17978, 19700182758, 3600148102, 14308, 21121…
#> $ Title <chr> "Neuron", "Nature Communications", "Alzheime…
#> $ Type <chr> "journal", "journal", "journal", "journal", …
#> $ Issn <chr> "10974199, 08966273", "20411723", "15525279,…
#> $ Publisher <chr> "Cell Press", "Nature Research", "John Wiley…
#> $ Open.Access <chr> "No", "Yes", "No", "No", "Yes", "Yes", "Yes"…
#> $ Open.Access.Diamond <chr> "No", "No", "No", "No", "No", "No", "No", "N…
#> $ SJR <dbl> 8.564, 4.904, 4.530, 3.611, 3.283, 2.425, 2.…
#> $ SJR.Best.Quartile <chr> "Q1", "Q1", "Q1", "Q1", "Q1", "Q1", "Q1", "Q…
#> $ H.index <int> 569, 634, 194, 380, 929, 150, 76, 152, 196, …
#> $ Total.Docs...2025. <int> 348, 11528, 1244, 332, 4305, 532, 473, 289, …
#> $ Total.Docs...3years. <int> 1058, 26313, 1938, 859, 11040, 1395, 699, 10…
#> $ Total.Refs. <int> 27520, 755955, 72380, 19345, 236204, 38250, …
#> $ Total.Citations..3years. <int> 12733, 452297, 17963, 5437, 95587, 10614, 77…
#> $ Citable.Docs...3years. <int> 778, 25888, 1394, 530, 10095, 1384, 690, 394…
#> $ Citations...Doc...2years. <dbl> 11.25, 16.60, 11.93, 5.88, 8.23, 7.37, 11.57…
#> $ Ref....Doc. <dbl> 79.08, 65.58, 58.18, 58.27, 54.87, 71.90, 76…
#> $ X.Female <dbl> 41.08, 37.59, 49.88, 45.28, 36.99, 45.59, 38…
#> $ Overton <int> 2, 91, 6, 1, 78, 2, 0, 7, 0, 0, 1, 1, 0, 0, …
#> $ Country <chr> "United States", "United Kingdom", "United S…
#> $ Region <chr> "Northern America", "Western Europe", "North…
#> $ Coverage <chr> "1988-2026", "2010-2026", "2005-2026", "1969…
#> $ Categories <chr> "Neuroscience (miscellaneous) (Q1)", "Bioche…
#> $ Areas <chr> "Neuroscience", "Biochemistry, Genetics and …
#> $ ISSN <chr> "10974199; 08966273", "20411723", "15525279;…
#> $ ISSN.1 <chr> "10974199", "20411723", "15525279", "0006322…
#> $ ISSN.2 <chr> "08966273", "", "15525260", "18732402", "002…
dplyr::glimpse(pub_data$combined)
#> Rows: 23
#> Columns: 55
#> $ id <chr> "40930373", "41463035", "41490486", "4107719…
#> $ source <chr> "MED", "MED", "MED", "MED", "MED", "MED", "M…
#> $ pmid <chr> "40930373", "41463035", "41490486", "4107719…
#> $ pmcid <chr> "PMC12911324", "PMC12730554", "PMC12799112",…
#> $ doi <chr> "10.1016/j.biopsych.2025.08.020", "10.3390/b…
#> $ title <chr> "RNA in Plasma Extracellular Vesicles of Ado…
#> $ authorString <chr> "Korobkova L, Thornton ME, Collin MA, Morin …
#> $ journalTitle <chr> "Biol Psychiatry", "Biomedicines", "Proc Nat…
#> $ journalVolume <chr> "100", "13", "123", "91", "70", "195", "21",…
#> $ pubYear <int> 2026, 2025, 2026, 2025, 2025, 2025, 2025, 20…
#> $ journalIssn <chr> "00063223; 18732402;", "22279059", "00278424…
#> $ pageInfo <chr> "64-75", "3025", "e2426232122", "106626", "2…
#> $ pubType <chr> "research-article; journal article", "review…
#> $ isOpenAccess <chr> "N", "Y", "Y", "Y", "Y", "N", "Y", "Y", "Y",…
#> $ inEPMC <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y",…
#> $ inPMC <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y",…
#> $ citedByCount <dbl> 3, 6, 3, 3, 3, 3, 16, 3, 5, 8, 9, 35, 5, 5, …
#> $ hasReferences <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y",…
#> $ hasTextMinedTerms <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y",…
#> $ hasDbCrossReferences <chr> "N", "N", "Y", "N", "N", "N", "N", "N", "N",…
#> $ hasPDF <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y",…
#> $ hasBook <chr> "N", "N", "N", "N", "N", "N", "N", "N", "N",…
#> $ hasSuppl <chr> "Y", "N", "Y", "Y", "N", "Y", "Y", "Y", "N",…
#> $ hasLabsLinks <chr> "N", "N", "Y", "Y", "N", "Y", "Y", "Y", "N",…
#> $ hasTMAccessionNumbers <chr> "Y", "Y", "N", "Y", "Y", "Y", "Y", "Y", "Y",…
#> $ firstPublicationDate <chr> "2025-09-08", "2025-12-10", "2026-01-05", "2…
#> $ firstIndexDate <chr> "2025-09-12", "2026-01-02", "2026-01-06", "2…
#> $ issue <chr> "1", "12", "2", "5", "7", "4", "5", "1", "3"…
#> $ ISSN.1 <chr> "00063223", "22279059", "00278424", "0163445…
#> $ ISSN.2 <chr> "18732402;", "", "10916490;", "15322742;", "…
#> $ Rank <int> 522, 3816, 626, 1215, 16730, 10559, 349, 306…
#> $ Sourceid <dbl> 14308, 21100840442, 21121, 22428, 19494, 234…
#> $ Title <chr> "Biological Psychiatry", "Biomedicines", "Pr…
#> $ Type <chr> "journal", "journal", "journal", "journal", …
#> $ Issn <chr> "00063223, 18732402", "22279059", "10916490,…
#> $ Publisher <chr> "Elsevier Inc.", "Multidisciplinary Digital …
#> $ Open.Access <chr> "No", "Yes", "Yes", "Yes", "Yes", "No", "No"…
#> $ Open.Access.Diamond <chr> "No", "No", "No", "No", "No", "No", "No", "N…
#> $ SJR <dbl> 3.611, 1.165, 3.283, 2.180, 0.313, 0.561, 4.…
#> $ SJR.Best.Quartile <chr> "Q1", "Q1", "Q1", "Q1", "Q2", "Q1", "Q1", "Q…
#> $ H.index <int> 380, 108, 929, 152, 63, 98, 194, 634, 125, 1…
#> $ Total.Docs...2025. <int> 332, 3096, 4305, 289, 48, 51, 1244, 11528, 1…
#> $ Total.Docs...3years. <int> 859, 9523, 11040, 1072, 178, 178, 1938, 2631…
#> $ Total.Refs. <int> 19345, 215639, 236204, 10607, 1744, 3394, 72…
#> $ Total.Citations..3years. <int> 5437, 46921, 95587, 3945, 219, 405, 17963, 4…
#> $ Citable.Docs...3years. <int> 530, 9348, 10095, 394, 177, 176, 1394, 25888…
#> $ Citations...Doc...2years. <dbl> 5.88, 4.74, 8.23, 4.41, 1.28, 2.43, 11.93, 1…
#> $ Ref....Doc. <dbl> 58.27, 69.65, 54.87, 36.70, 36.33, 66.55, 58…
#> $ X.Female <dbl> 45.28, 48.07, 36.99, 46.76, 40.17, 48.56, 49…
#> $ Overton <int> 1, 5, 78, 7, 0, 0, 6, 91, 0, 0, 1, 2, 6, 0, …
#> $ Country <chr> "United States", "Switzerland", "United Stat…
#> $ Region <chr> "Northern America", "Western Europe", "North…
#> $ Coverage <chr> "1969-2026", "2013-2026", "1917, 1933, 1945-…
#> $ Categories <chr> "Biological Psychiatry (Q1)", "Biochemistry,…
#> $ Areas <chr> "Neuroscience", "Biochemistry, Genetics and …PubMed IDs for the matched articles:
get_word_cloud() fetches abstracts for a vector of
PubMed IDs and writes a PNG word cloud:
wordcloud_path <- "microbiome_psych_wordcloud.png"
get_word_cloud(
pubmed_ids = pmids,
plot_name = wordcloud_path
)
#> There are total 23 PMIDs
#> Warning in tm_map.SimpleCorpus(abstTxt, removePunctuation): transformation
#> drops documents
#> Warning in tm_map.SimpleCorpus(text2.corpus, function(x) removeNumbers(x)):
#> transformation drops documents
#> Warning in tm_map.SimpleCorpus(text2.corpus, tolower): transformation drops
#> documents
#> Warning in tm_map.SimpleCorpus(text2.corpus, removeWords,
#> stopwords("english")): transformation drops documents
#> png
#> 2
knitr::include_graphics(wordcloud_path)Filter the matched journals to subject areas of interest, then keep titles at or above the median SJR within that subset.
cats <- "Multidisciplinary|Neuroscience|Psychology|Psychiatry"
best_journals <- pub_data$journals |>
filter(
Type == "journal",
SJR >= median(SJR, na.rm = TRUE),
grepl(cats, Categories)
) |>
select(Title, Rank, Type, SJR, Country, Categories)
best_journals
#> # A tibble: 8 × 6
#> Title Rank Type SJR Country Categories
#> <chr> <int> <chr> <dbl> <chr> <chr>
#> 1 Neuron 115 jour… 8.56 United… Neuroscie…
#> 2 Nature Communications 306 jour… 4.90 United… Biochemis…
#> 3 Alzheimer's and Dementia 349 jour… 4.53 United… Cellular …
#> 4 Biological Psychiatry 522 jour… 3.61 United… Biologica…
#> 5 Proceedings of the National Academy of S… 626 jour… 3.28 United… Multidisc…
#> 6 Translational Psychiatry 1023 jour… 2.42 United… Biologica…
#> 7 Research 1213 jour… 2.18 United… Multidisc…
#> 8 Current Neuropharmacology 2068 jour… 1.64 United… Medicine …Adjust the category pattern and ranking rule to match your field. For
InCites data (journal_source = "incities", or aliases
incites / jcr), use columns such as
Journal.Impact.Factor instead of SJR.
Save the ranked journal table for review outside R.
get_publication_data()scimago and incities (InCites /
JCR) journal sources for your topic?get_publication_data and the function
reference for all parameters