Great Britain’s STATS19 road casualty data spans nearly half a century (1979 to 2025). Over this time, data hosting infrastructure, file naming conventions, column definitions, and reporting methodologies have changed substantially.
This article documents how STATS19 has evolved, and how the
stats19 R package normalizes these differences to provide a
consistent longitudinal dataset.
| Era | Primary Format | Host / Provider | Typical File Names |
|---|---|---|---|
| Pre-2016 | Bundled .zip archives |
UK Data Service (UKDS) & early data.gov.uk | Stats19_Data_2005-2014.zipRoadSafetyData_2015.zip
(containing Accidents0514.csv,
Casualties0514.csv, Vehicles0514.csv) |
| 2016–2023 | Direct .csv downloads |
Department for Transport (AWS S3) | dft-road-casualty-statistics-collision-1979-latest-published-year.csvdft-road-casualty-statistics-casualty-2021.csv |
| 2024–Present | HTTPS streaming CSV & Parquet cache | Department for Transport
(data.dft.gov.uk) |
dft-road-casualty-statistics-collision-2025.csvcollisions.parquet
(via stats19_to_parquet()) |
Early versions of stats19 unzipped local temporary
archives. Modern versions download CSVs directly via
curl::curl_download(), and v4.2.0 adds out-of-core caching
with DuckDB and Parquet (stats19_to_parquet()).
In 2024, the Department for Transport formally modernized its terminology from “Accident” to “Collision” to reflect that road incidents are preventable collisions rather than unavoidable accidents:
| Legacy Field (Pre-2024) | Modern Field (2024+) | Unified Name in stats19 |
|---|---|---|
accident_index |
collision_index |
collision_index |
accident_year |
collision_year |
collision_year |
accident_reference /
accident_ref_no |
collision_ref_no |
collision_reference |
accident_severity |
collision_severity |
collision_severity |
date / accident_date |
collision_date / date |
date |
time / accident_time |
collision_time / time |
time |
In stats19 v4.0.0+, read_stats19() and
stats19_to_parquet() automatically normalize these
identifiers across all historical files.
*_historic Column SplitStarting in 2024, the DfT separated several categorical variables
that had changed coding categories over time into modern and
_historic counterparts:
carriageway_hazards vs
carriageway_hazards_historicjunction_detail vs
junction_detail_historicpedestrian_crossing_human_control vs
pedestrian_crossing_human_control_historicpedestrian_crossing_physical_facilities vs
pedestrian_crossing_physical_facilities_historicvehicle_manoeuvre vs
vehicle_manoeuvre_historicjourney_purpose_of_driver vs
journey_purpose_of_driver_historicIn raw files, combining 2023 and 2024 data created fragmented columns
with extensive missing values. stats19 automatically
coalesces each *_historic column into its canonical
variable, allowing continuous longitudinal modeling across decades
without data loss.
Between 2016 and 2019, police forces in England and Wales progressively adopted injury-based reporting systems (CRASH and COPA). Under CRASH, officers record specific injuries rather than subjectively classifying severity, resulting in an artificial upward step-change in recorded “Serious” casualties.
...adjustment-lookup_2004-latest-published-year.csv).casualty_adjusted_severity_serious,
casualty_adjusted_severity_slight).To compute continuous serious and slight casualty counts from 2004 onwards:
library(stats19)
# Read casualty data
cas = get_stats19(year = 2004:2025, type = "casualty")
# Calculate both raw and DfT-adjusted counts:
cas_summary = summarise_adjusted_severities(cas, by = "collision_year")
head(cas_summary)As mobility patterns evolve, new variables have been added to the DfT schema:
escooter_flag column
was introduced in the vehicle dataset. stats19 includes
smart cross-referencing to flag e-scooter casualties even when the raw
casualty records lack explicit mode tags.local_authority_ons_district,
lsoa_of_accident_location).The package metadata has evolved across three stages: 1.
schema_original (static data frames from UKDS
documentation). 2. Manually curated CSVs
(stats19_schema.csv, stats19_variables.csv).
3. Fully automated extraction via data-raw/schema_new.R,
which downloads the official DfT data release guide and generates
reproducible lookup tables directly into
data/stats19_schema.rda.