The table below provides a comprehensive summary of population shifts, total population change, percentage change, and population density across fourteen Middle Tennessee counties. The primary data used to analyze these demographic changes came from the U.S. Census Bureau’s American Community Survey. As demonstrated in the data, suburban “Doughnut” counties surrounding Davidson County, specifically Rutherford, Williamson, and Wilson—experienced the highest rates of overall population expansion. While Davidson County retains the highest absolute population density per square mile, the surrounding suburban area continues to absorb a significant proportion of regional growth, causing medium-density categories to spread further into neighboring counties.
Below is the complete R script used to process the population vectors, calculate density metrics, and construct the formatted output table.
library(tidyverse)
library(knitr)
library(kableExtra)
County <- c("Cannon", "Cheatham", "Davidson", "Dickson", "Hickman", "Macon",
"Maury", "Robertson", "Rutherford", "Smith", "Sumner", "Trousdale",
"Williamson", "Wilson")
CurrentPop <- c(14818, 41829, 715388, 55983, 25436, 26240, 107791, 75539, 360646,
20389, 204424, 11957, 260351, 158805)
EarlierPop <- c(13958, 39087, 598184, 51608, 24561, 23261, 88738, 67517, 292425,
19389, 174773, 10131, 208242, 129918)
Region <- c("Non-doughnut", "Doughnut", "Davidson", "Non-doughnut", "Non-doughnut",
"Non-doughnut", "Non-doughnut", "Doughnut", "Doughnut", "Non-doughnut",
"Doughnut", "Non-doughnut", "Doughnut", "Doughnut")
LandArea <- c(266, 303, 504, 490, 613, 307,
613, 477, 619, 314, 529, 114,
583, 571)
Population <- data.frame(County, CurrentPop, EarlierPop, Region, LandArea) %>%
mutate(Change = CurrentPop - EarlierPop)
Population_v2 <- Population %>%
mutate(
Percent_change = Change / EarlierPop,
Density = CurrentPop / LandArea,
Density_Category = case_when(
Density >= 500 ~ "High",
Density >= 100 ~ "Medium",
TRUE ~ "Low"
)
) %>%
arrange(desc(Percent_change))
The revised table below pulls directly from the
updated Population_v2 data frame and incorporates the newly
computed Density and Density_Category variables.
library(tidyverse)
library(knitr)
library(kableExtra)
Population_v2_table <- Population_v2 %>%
mutate(
CurrentPop = format(CurrentPop, big.mark = ","),
EarlierPop = format(EarlierPop, big.mark = ","),
Change = format(Change, big.mark = ","),
Percent_change = sprintf("%.1f%%", Percent_change * 100),
Density = sprintf("%.1f", Density)
) %>%
kable(
caption = "Population v2: Regional Growth & Density Summary",
col.names = c("County", "Current Pop", "Earlier Pop", "Region", "Land Area (sq mi)", "Change", "% Change", "Density (per sq mi)", "Density Category"),
align = c("l", "r", "r", "c", "r", "r", "r", "r", "c")
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE
) %>%
row_spec(0, bold = TRUE, background = "#2C3E50", color = "white")
Population_v2_table
| County | Current Pop | Earlier Pop | Region | Land Area (sq mi) | Change | % Change | Density (per sq mi) | Density Category |
|---|---|---|---|---|---|---|---|---|
| Williamson | 260,351 | 208,242 | Doughnut | 583 | 52,109 | 25.0% | 446.6 | Medium |
| Rutherford | 360,646 | 292,425 | Doughnut | 619 | 68,221 | 23.3% | 582.6 | High |
| Wilson | 158,805 | 129,918 | Doughnut | 571 | 28,887 | 22.2% | 278.1 | Medium |
| Maury | 107,791 | 88,738 | Non-doughnut | 613 | 19,053 | 21.5% | 175.8 | Medium |
| Davidson | 715,388 | 598,184 | Davidson | 504 | 117,204 | 19.6% | 1419.4 | High |
| Trousdale | 11,957 | 10,131 | Non-doughnut | 114 | 1,826 | 18.0% | 104.9 | Medium |
| Sumner | 204,424 | 174,773 | Doughnut | 529 | 29,651 | 17.0% | 386.4 | Medium |
| Macon | 26,240 | 23,261 | Non-doughnut | 307 | 2,979 | 12.8% | 85.5 | Low |
| Robertson | 75,539 | 67,517 | Doughnut | 477 | 8,022 | 11.9% | 158.4 | Medium |
| Dickson | 55,983 | 51,608 | Non-doughnut | 490 | 4,375 | 8.5% | 114.3 | Medium |
| Cheatham | 41,829 | 39,087 | Doughnut | 303 | 2,742 | 7.0% | 138.0 | Medium |
| Cannon | 14,818 | 13,958 | Non-doughnut | 266 | 860 | 6.2% | 55.7 | Low |
| Smith | 20,389 | 19,389 | Non-doughnut | 314 | 1,000 | 5.2% | 64.9 | Low |
| Hickman | 25,436 | 24,561 | Non-doughnut | 613 | 875 | 3.6% | 41.5 | Low |
Growth Trends: The highest percentage growth is concentrated heavily in suburban “Doughnut” counties (such as Rutherford, Williamson, and Wilson), outstripping the relative growth rate of central Davidson County.
Density Classifications: Davidson County maintains the highest overall density rating, while immediate surrounding suburban counties fall into the medium-to-high density tiers. Rural “Non-doughnut” counties consistently exhibit low population density (under 100 residents per square mile).