This repository provides weekly US Drought Monitor (USDM) data aggregated to US Census county boundaries. This dataset facilitates county-level analysis of drought conditions, supporting research, policy-making, and climate resilience planning.
📂 View the US Drought Monitor county archive listing here.
The goal of this repository is to aggregate county-level US Drought Monitor data in a consistent and reproducible way, using authoritative US Census county boundaries. Given the regulatory role played by the interaction between USDM and county boundaries (e.g., 7 CFR 1416.205, 7 CFR 759.5), it is essential that this work be authoritative, well-documented, and available in a persistent, and findable archive established by a Federal agency. This work seeks to create a framework for such an archive, with the ultimate goal of conforming with the Foundations for Evidence-Based Policymaking Act of 2018 (“Evidence Act”, Public Law 115–435), the Geospatial Data Act of 2018 (enacted as part of Public Law 115–254), and Executive Order 14303, Restoring Gold Standard Science.
📈 About the US Drought Monitor (USDM)
The US Drought Monitor is a weekly map-based product that synthesizes multiple drought indicators into a single national assessment. It is produced by:
- National Drought Mitigation Center (NDMC)
- US Department of Agriculture (USDA)
- National Oceanic and Atmospheric Administration (NOAA)
Each weekly map represents a combination of data analysis and expert interpretation.
The USDM weekly maps depicting drought conditions are categorized into six levels:
- None: Normal or wet conditions
- D0: Abnormally Dry
- D1: Moderate Drought
- D2: Severe Drought
- D3: Extreme Drought
- D4: Exceptional Drought
While USDM drought class boundaries are developed without regard to political boundaries, it is often aggregated by political boundaries to assist in decision-making and for regulatory purposes. This repository focuses on aggregating these data to the county level, enabling more localized analysis and decision-making.
Note: This archive is maintained by the Montana Climate Office, but all analytical authorship of the USDM drought maps belongs to the named USDM authors.
🗂 Directory Structure
usdm-counties.R: R script that processes and aggregates weekly USDM shapefiles to county boundaries.usdm-counties.json: The worst drought class in each county each week, restructured for browsers (see Output Data below).data/: Directory containing processed county-level USDM data and US Census county boundary files.README.Rmd: This README file, providing an overview and usage instructions.
The data/ directory and the consolidated Parquet are mirrored to S3
and served via CloudFront at
https://data.sustainable-fsa.com/usdm-counties/ — that mirror is the
archive of record, and the data are not kept in git.
usdm-counties.json is a deliberate exception to that policy: it is
mirrored to S3 and committed to git, so the web maps that read it have
a small, versioned copy that moves with the repository.
Data Sources
- USDM Polygons: Weekly
.parquetfiles from sustainable-fsa/usdm - U.S. Census County Boundaries: Downloaded from the U.S. Census TIGER/Line archive for 2000–2024.
- For each USDM date, the county boundary vintage used is the most recently available TIGER/Line file as of that year.
- For example:
- USDM maps from 2000 use 2000 vintage counties
- USDM maps from 2010 use 2000 vintage counties
- USDM maps from 2011 use 2010 vintage counties
- USDM maps from 2014 use 2013 vintage counties
- …
- USDM maps from 2026 use 2025 counties (the latest available)
All boundaries are reprojected to EPSG:4326, geometrically validated,
and saved in .parquet format.
Processing Pipeline
The analysis pipeline is fully contained in
usdm-counties.R and proceeds as follows:
- Install and load dependencies:
- Uses
pak::pak()to ensure fresh, source-built installs of critical geospatial packages.
-
Fetch the vintage-matched county boundaries from the
census-countiesarchive, which owns the TIGER/Line downloads, the per-vintage schema normalization and the validity repair. Vintages are discovered from the archive rather than hardcoded, so a new TIGER release needs no edit here. -
Cache each vintage locally under
data-raw/census/{year}-counties.parquet:
- Join the state name and reproject to EPSG:4326 once, so every parallel worker sees the schema the determinations are written against
- Cached rather than read per task because the intersections run in parallel across ~1,400 weeks
- Match USDM dates with appropriate county vintage:
- Each USDM date is paired with the most recent county boundary file available for that year
- The full list of USDM dates is generated starting from
2000-01-04, up to two days before the current date
- Download and intersect:
- For each weekly USDM
.parquetfile: - Read county and drought geometries
- Perform spatial intersection
- Calculate the percent of each county area affected by each drought class
- Tabular output is saved to
data/usdm/USDM_{YYYY-MM-DD}.parquet
- Output Structure: Each output file is a non-spatial
.parquetfile with the following fields:
STATEFP,State,COUNTYFP,County,CountyLSADusdm_class: One ofNone,D0,D1,D2,D3,D4percent: Proportion of the county in this drought class (as a decimal between 0 and 1)
- Consolidate and publish:
- Every weekly table is concatenated into
usdm-counties.parquet, the archive of record. - The same records, reduced to the worst drought class per county and
week, are written to
usdm-counties.jsonfor web maps (see Output Data below).
📤 Output Data
usdm-counties.json
The same weekly records as the Parquet — reduced from the identical table in the same run — restructured for direct use in a browser. It carries the worst drought class in each county each week and nothing else; the per-class area percents stay in the Parquet. It is what the web maps load, not an archive-of-record format: for analysis, use the Parquet.
- One string per county: a county’s entire history is a single
fixed-width string of class codes (
0=Nonethrough5=D4), one character per weekly USDM Tuesday on an implicit axis beginning 2000-01-04. No dates are stored, and a.marks a week in which the county is absent from that week’s boundary vintage — this archive’s county set changes as the Census TIGER/Line vintages change, so the grid is not full. The file is roughly 4.6 MB raw and about 400 KB gzipped over the wire. - Worst class, no threshold: the class for a county-week is the maximum over every record present, with no area-percent cutoff — any nonzero-area sliver of a class counts. This is the same reduction the Quick Start example below performs on a single week.
- Dictionary-coded names: county FIPS codes and county and state names each appear once, in arrays running parallel to the per-county strings. A county’s display name is the one recorded at its most recent week, which also heals a historical double-encoding of accented names in the older boundary vintages.
The payload is self-describing via its schema field
(usdm-max-class/1), a frozen contract with the web map: fields may be
added, but existing ones are never renamed or reordered without bumping
the schema. The same schema serves the
usdm-counties-reported
and
usdm-counties-fsa-lfp
archives; the dataset field says which of the three a given payload
is.
🛠️ Dependencies
Key R packages used:
sfterraarrowtidyversecurl
The script installs all required packages using the
pak package.
📍 Quick Start: Visualize a Weekly County USDM Map in R
This snippet shows how to load a weekly GeoParquet file from the archive
and create a simple drought classification map using sf and ggplot2.
# Load required libraries
library(arrow)
library(sf)
library(ggplot2) # For plotting
library(tigris) # For state boundaries
library(rmapshaper) # For innerlines function
## Get latest USDM data
latest <-
jsonlite::fromJSON(
"https://data.sustainable-fsa.com/usdm-counties/manifest.json"
)$path |>
stringr::str_subset("parquet") |>
max()
# e.g., [1] "data/usdm/USDM_2025-05-27.parquet"
date <-
latest |>
stringr::str_extract("\\d{4}-\\d{2}-\\d{2}") |>
lubridate::as_date()
# Get the highest (worst) drought class in each county
usdm <-
paste0("https://data.sustainable-fsa.com/usdm-counties/", latest) |>
arrow::read_parquet() |>
dplyr::group_by(STATEFP, COUNTYFP) |>
dplyr::filter(usdm_class == max(usdm_class))
counties <-
tigris::counties(cb = TRUE,
resolution = "5m",
progress_bar = FALSE) |>
dplyr::filter(
!(STATE_NAME %in% c("Guam",
"American Samoa",
"United States Virgin Islands",
"Commonwealth of the Northern Mariana Islands"))
) |>
sf::st_cast("POLYGON", warn = FALSE, do_split = TRUE) |>
tigris::shift_geometry() |>
dplyr::group_by(STATEFP, COUNTYFP) |>
dplyr::summarise() |>
sf::st_cast("MULTIPOLYGON")
usdm_counties <-
usdm |>
dplyr::left_join(counties) |>
sf::st_as_sf()
# Plot the map
ggplot(counties) +
geom_sf(data = sf::st_union(counties),
fill = "grey80",
color = NA) +
geom_sf(data = usdm_counties,
aes(fill = usdm_class),
color = NA) +
geom_sf(data = rmapshaper::ms_innerlines(counties),
fill = NA,
color = "white",
linewidth = 0.1) +
geom_sf(data = counties |>
dplyr::group_by(STATEFP) |>
dplyr::summarise() |>
rmapshaper::ms_innerlines(),
fill = NA,
color = "white",
linewidth = 0.2) +
scale_fill_manual(
values = c("grey80",
"#ffff00",
"#fcd37f",
"#ffaa00",
"#e60000",
"#730000"),
drop = FALSE,
name = "Drought\nClass") +
labs(title = "US Drought Monitor",
subtitle = format(date, " %B %d, %Y")) +
theme_void()
## Warning in class(input) == c("sf", "tbl_df", "tbl", "data.frame"): longer
## object length is not a multiple of shorter object length

Latest USDM map date: September 01, 2026
📝 Citation
If you use this data in published work, please cite:
National Drought Mitigation Center, USDA, and NOAA. US Drought Monitor Weekly Maps Aggregated to US Census County Boundaries. Aggregated, curated, and archived by R. Kyle Bocinsky, Montana Climate Office, University of Montana. Sustainable FSA project. Accessed YYYY-MM-DD. https://sustainable-fsa.com/usdm-counties/
Machine-readable metadata are in CITATION.cff;
GitHub’s Cite this repository button (top right of the repo page)
renders it as APA or BibTeX.
Acknowledgment: This work is part of the Enhancing Sustainable Disaster Relief in FSA Programs project, supported by the USDA Office of the Chief Economist, Office of Energy and Environmental Policy, and the USDA Climate Hubs.
📄 License
- Raw USDM data (NDMC): Public Domain (17 USC § 105)
- Processed data & scripts: © R. Kyle Bocinsky, released under CC0 and MIT License as applicable
⚠️ Disclaimer
This dataset is archived for research and educational use only. The National Drought Mitigation Center hosts the US Drought Monitor. Please visit https://droughtmonitor.unl.edu.
👏 Acknowledgment
This project is part of:
Enhancing Sustainable Disaster Relief in FSA
Programs
Supported by USDA OCE/OEEP and USDA Climate Hubs
Prepared by the Montana Climate Office
📬 Contact
R. Kyle Bocinsky
Director of Climate Extension
Montana Climate Office
📧 kyle.bocinsky@umontana.edu
🌐 https://climate.umt.edu