Introduction

This report uses the NTAD National Bridge Inventory dataset, a federal dataset containing over 600,000 bridge records across the United States, to explore one main story: do older bridges tend to be in worse structural condition? Bridge infrastructure is a longstanding public safety concern, and understanding the relationship between bridge age and condition can help identify where maintenance and investment are most urgently needed. The three visualizations below each convey one part of this story, moving from an overview of the current condition landscape to a closer look at how age relates to structural ratings.

library(tidyverse)
library(janitor)
NTAD_National_Bridge_Inventory <- read_csv("C:/Users/Wiest/Desktop/Home items/NTAD_National_Bridge_Inventory_4731338632742650510.csv")

cleanbridges <- NTAD_National_Bridge_Inventory %>%
  clean_names() %>%
  mutate(bridge_condition = factor(bridge_condition, levels = c("G", "F", "P")))

Figure 1: The Majority of U.S. Bridges Are Currently Rated Fair or Good

ggplot(cleanbridges, aes(x = bridge_condition)) +
  geom_bar() +
  scale_y_continuous(labels = scales::comma) +
  labs(
    title = "Most U.S. Bridges Are Rated Fair or Good",
    x = "Bridge Condition (G = Good, F = Fair, P = Poor)",
    y = "Number of Bridges"
  )
Fair-rated bridges make up the largest share of U.S. bridges, followed closely by Good-rated bridges. Poor-rated bridges represent a smaller but significant portion of the national inventory. Data source: NTAD National Bridge Inventory (2025), n = 624,193 bridges.

Fair-rated bridges make up the largest share of U.S. bridges, followed closely by Good-rated bridges. Poor-rated bridges represent a smaller but significant portion of the national inventory. Data source: NTAD National Bridge Inventory (2025), n = 624,193 bridges.


Figure 2: Poor-Condition Bridges Were Typically Built Decades Earlier

ggplot(cleanbridges, aes(x = bridge_condition, y = year_built_027)) +
  geom_boxplot() +
  labs(
    title = "Poor-Condition Bridges Were Built Earlier Than Good-Condition Ones",
    x = "Bridge Condition (G = Good, F = Fair, P = Poor)",
    y = "Year Built"
  )
Bridges rated Poor were built significantly earlier than those rated Good. The median construction year for Good-rated bridges is approximately 2000, compared to roughly 1960 for Poor-rated bridges. This suggests that age is a meaningful factor in structural decline. Data source: NTAD National Bridge Inventory (2025), n = 624,193 bridges.

Bridges rated Poor were built significantly earlier than those rated Good. The median construction year for Good-rated bridges is approximately 2000, compared to roughly 1960 for Poor-rated bridges. This suggests that age is a meaningful factor in structural decline. Data source: NTAD National Bridge Inventory (2025), n = 624,193 bridges.


Figure 3: The U.S. Bridge Stock Is Aging — A Large Share Was Built Before 1980

ggplot(cleanbridges, aes(x = year_built_027)) +
  geom_histogram(binwidth = 10) +
  labs(
    title = "Most U.S. Bridges Were Built Between 1950 and 2000",
    x = "Year Built",
    y = "Number of Bridges"
  )
Construction of U.S. bridges peaked between 1960 and 1990, meaning a large portion of the national bridge inventory is now 35 to 65 years old. As Figure 2 shows, older bridges are more likely to carry Fair or Poor condition ratings, making this aging infrastructure a growing concern. Data source: NTAD National Bridge Inventory (2025), n = 624,193 bridges.

Construction of U.S. bridges peaked between 1960 and 1990, meaning a large portion of the national bridge inventory is now 35 to 65 years old. As Figure 2 shows, older bridges are more likely to carry Fair or Poor condition ratings, making this aging infrastructure a growing concern. Data source: NTAD National Bridge Inventory (2025), n = 624,193 bridges.


Save Favorite Plot

# Saving Figure 2 as the favorite plot -- most clearly shows the story
ggplot(cleanbridges, aes(x = bridge_condition, y = year_built_027)) +
  geom_boxplot() +
  labs(
    title = "Poor-Condition Bridges Were Built Earlier Than Good-Condition Ones",
    x = "Bridge Condition (G = Good, F = Fair, P = Poor)",
    y = "Year Built"
  )

ggsave("Lab3_FavoritePlot_AnthonyWiest.png", width = 8, height = 5)