Williamson and Rutherford county grew faster than Davidson county over the past five years, even though Davidson picked up more people, the latest Census date show. In terms of growth per 100 residents among counties in the Nashville Metropolitan Statistical Area, Davidson County ranked fifth, behind Williamson, Rutherford, Wilson, and Maury counties. Davidson did lead the region in total growth, however, logging 117,204 new residents during the period. Rutherford came in second by that measure, with 68,221 new residents, and Williamson placed third, with 52,109.
This table shows details for each county, with the data sorted by the change per 100 residents. Williamson, for example, grew by 25 percent, or 25 new residents for every 100 original residents. Davidson, by contrast, grew by, about 20 percent
| County | CurrentPop | EarlierPop | Region | Change | Percent_change |
|---|---|---|---|---|---|
| Williamson | 260351 | 208242 | Doughnut | 52109 | 0.2502329 |
| Rutherford | 360646 | 292425 | Doughnut | 68221 | 0.2332940 |
| Wilson | 158805 | 129918 | Doughnut | 28887 | 0.2223479 |
| Maury | 107791 | 88738 | Non-doughnut | 19053 | 0.2147107 |
| Davidson | 715388 | 598184 | Davidson | 117204 | 0.1959330 |
| Trousdale | 11957 | 10131 | Non-doughnut | 1826 | 0.1802389 |
| Sumner | 204424 | 174773 | Doughnut | 29651 | 0.1696544 |
| Macon | 26240 | 23261 | Non-doughnut | 2979 | 0.1280684 |
| Robertson | 75539 | 67517 | Doughnut | 8022 | 0.1188145 |
| Dickson | 55983 | 51608 | Non-doughnut | 4375 | 0.0847737 |
| Cheatham | 41829 | 39087 | Doughnut | 2742 | 0.0701512 |
| Cannon | 14818 | 13958 | Non-doughnut | 860 | 0.0616134 |
| Smith | 20389 | 19389 | Non-doughnut | 1000 | 0.0515756 |
| Hickman | 25436 | 24561 | Non-doughnut | 875 | 0.0356256 |
Here is the code that produced the analysis. The analysis relied on data from U.S Census Bureau American Community Survey.
#=========================================================
# Step 1: Install and load required packages
#=========================================================
required_packages <- c("tidyverse", "knitr", "kableExtra")
for (pkg in required_packages) {
if (!requireNamespace(pkg, quietly = TRUE)) {
install.packages(pkg)
}
}
library(tidyverse)
library(knitr)
library(kableExtra)
#=========================================================
# Step 2: Create a vector containing county names
#=========================================================
County <- c("Cannon", "Cheatham", "Davidson", "Dickson", "Hickman", "Macon",
"Maury", "Robertson", "Rutherford", "Smith", "Sumner", "Trousdale",
"Williamson", "Wilson")
#=========================================================
# Step 3: Create a vector containing current population data
#=========================================================
CurrentPop <- c(14818, 41829, 715388, 55983, 25436, 26240, 107791, 75539,
360646, 20389, 204424, 11957, 260351, 158805)
#=========================================================
# Step 4: Create a vector containing earlier population data
#=========================================================
EarlierPop <- c(13958, 39087, 598184, 51608, 24561, 23261, 88738, 67517,
292425, 19389, 174773, 10131, 208242, 129918)
#=========================================================
# Step 5: Create a vector identifying each county's region
#=========================================================
Region <- c("Non-doughnut", "Doughnut", "Davidson", "Non-doughnut",
"Non-doughnut", "Non-doughnut", "Non-doughnut", "Doughnut",
"Doughnut", "Non-doughnut", "Doughnut", "Non-doughnut",
"Doughnut", "Doughnut")
#=========================================================
# Step 6: Combine vectors into a population data frame
#=========================================================
Population <- data.frame(
County,
CurrentPop,
EarlierPop,
Region
)
#=========================================================
# Step 7: Display the original population data frame
#=========================================================
Population
#=========================================================
# Step 8: Sort the population data frame by current
# population in descending order
#=========================================================
Population <- Population %>%
arrange(desc(CurrentPop))
#=========================================================
# Step 9: Display the sorted population data frame
#=========================================================
Population
#=========================================================
# Step 10: Add a Change variable showing the difference
# between current and earlier population values
#=========================================================
Population <- Population %>%
mutate(Change = CurrentPop - EarlierPop)
#=========================================================
# Step 11: Display the updated population data frame
# with the new Change variable
#=========================================================
Population
#=========================================================
# Step 12: Create a data frame containing only County
# and Change, sorted by Change in descending order
#=========================================================
Change_only <- Population %>%
select(County, Change) %>%
arrange(desc(Change))
#=========================================================
# Step 13: Display the Change_only data frame
#=========================================================
Change_only
#=========================================================
# Step 14: Create a Doughnut data frame containing only
# Davidson and Doughnut region counties, sorted by
# Change in descending order
#=========================================================
Doughnut <- Population %>%
filter(Region %in% c("Davidson", "Doughnut")) %>%
arrange(desc(Change))
#=========================================================
# Step 15: Display the Doughnut data frame
#=========================================================
Doughnut
#=========================================================
# Step 16: Create a Summary data frame that totals
# population values by Region
#=========================================================
Summary <- Population %>%
group_by(Region) %>%
summarize(
CurrentPop = sum(CurrentPop),
EarlierPop = sum(EarlierPop),
Change = sum(Change)
)
#=========================================================
# Step 17: Display the Summary data frame
#=========================================================
Summary
#=========================================================
# Step 18: Create a copy of the Population data frame
#=========================================================
Population_v2 <- Population
#=========================================================
# Step 19: Add a Percent_change variable to
# Population_v2
#=========================================================
Population_v2 <- Population_v2 %>%
mutate(Percent_change = Change / EarlierPop)
#=========================================================
# Step 20: Sort Population_v2 by Percent_change
# in descending order
#=========================================================
Population_v2 <- Population_v2 %>%
arrange(desc(Percent_change))
#=========================================================
# Step 21: Display the Population_v2 data frame
#=========================================================
Population_v2
#=========================================================
# Step 22: Create and display a formatted table for
# Population
#=========================================================
Population_tbl <- Population %>%
kbl(caption = "Population Data") %>%
kable_styling(full_width = FALSE)
Population_tbl
#=========================================================
# Step 23: Create and display a formatted table for
# Change_only
#=========================================================
Change_only_tbl <- Change_only %>%
kbl(caption = "Population Change by County") %>%
kable_styling(full_width = FALSE)
Change_only_tbl
#=========================================================
# Step 24: Create and display a formatted table for
# Doughnut
#=========================================================
Doughnut_tbl <- Doughnut %>%
kbl(caption = "Davidson and Doughnut Counties") %>%
kable_styling(full_width = FALSE)
Doughnut_tbl
#=========================================================
# Step 25: Create and display a formatted table for
# Summary
#=========================================================
Summary_tbl <- Summary %>%
kbl(caption = "Regional Population Summary") %>%
kable_styling(full_width = FALSE)
Summary_tbl
#=========================================================
# Step 26: Create and display a formatted table for
# Population_v2
#=========================================================
Population_v2_tbl <- Population_v2 %>%
kbl(caption = "Population Data with Percent Change") %>%
kable_styling(full_width = FALSE)
Population_v2_tbl