This table shows the population growth rates among counties in the Nashville area and ranks counties by their percentage growth rate. This allows you to see the comparison of growth across the counties which are different sizes but also taking into consideration every countys starting population. Williamson County population growth was 25%, which is the fastest percentage growth, followed by Rutherford County at about 23%. Although, Davidson County does have the highest population, but the growth rate is much lower compared to Williamson and Rutherford County.

For more information on this topic, please see the ACS Website.

Here’s a look at the content:

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

Code:

Here is the R code, relied on data from U.S. Census Bureau’s American Community Survey.

# ==================================================
# Step 1: Install (if necessary) and load the tidyverse package
# ==================================================

if (!requireNamespace("tidyverse", quietly = TRUE)) {
  install.packages("tidyverse")
  library(tidyverse)
}

if (!requireNamespace("knitr", quietly = TRUE)) {
  install.packages("knitr")
}

if (!requireNamespace("kableExtra", quietly = TRUE)) {
  install.packages("kableExtra")
  
}

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 values
# ==================================================
CurrentPop <- c(14818, 41829, 715388, 55983, 25436, 26240, 107791, 75539,
                360646, 20389, 204424, 11957, 260351, 158805)

# ==================================================
# Step 4: Create a vector containing earlier population values
# ==================================================
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 category
# ==================================================
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 all vectors into a 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 CurrentPop
# in descending order
# ==================================================
Population <- Population %>%
  arrange(desc(CurrentPop))

# ==================================================
# Step 9: Display the sorted Population data frame
# ==================================================
Population

# ==================================================
# Step 10: Add a Change variable showing population growth
# ==================================================
Population <- Population %>%
  mutate(Change = CurrentPop - EarlierPop)

# ==================================================
# Step 11: Display the updated Population data frame
# ==================================================
Population

# ==================================================
# Step 12: Create a data frame containing only
# the County and Change variables
# ==================================================
Change_only <- Population %>%
  select(County, Change)

# ==================================================
# Step 13: Sort the Change_only data frame by
# Change in descending order
# ==================================================
Change_only <- Change_only %>%
  arrange(desc(Change))

# ==================================================
# Step 14: Display the Change_only data frame
# ==================================================
Change_only

# ==================================================
# Step 15: Create a Doughnut data frame containing
# only Davidson and Doughnut region counties
# ==================================================
Doughnut <- Population %>%
  filter(Region == "Davidson" | Region == "Doughnut")

# ==================================================
# Step 16: Sort the Doughnut data frame by Change
# in descending order
# ==================================================
Doughnut <- Doughnut %>%
  arrange(desc(Change))

# ==================================================
# Step 17: Display the Doughnut data frame
# ==================================================
Doughnut
# ==================================================
# Step 18: 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 19: Display the Summary data frame
# ==================================================
Summary
# ==================================================
# Step 20: Copy the Population data frame into
# a new data frame called Population_v2
# ==================================================
Population_v2 <- Population

# ==================================================
# Step 21: Create a Percent_change variable
# ==================================================
Population_v2 <- Population_v2 %>%
  mutate(Percent_change = Change / EarlierPop)

# ==================================================
# Step 22: Sort Population_v2 by Percent_change
# in descending order
# ==================================================
Population_v2 <- Population_v2 %>%
  arrange(desc(Percent_change))

# ==================================================
# Step 23: Display the Population_v2 data frame
# ==================================================
Population_v2
# ==================================================
# Step 25: Create and display a formatted table
# for the Population data frame
# ==================================================
Population_table <- kable(Population) %>%
  kable_styling(full_width = FALSE)

Population_table

# ==================================================
# Step 26: Create and display a formatted table
# for the Change_only data frame
# ==================================================
Change_only_table <- kable(Change_only) %>%
  kable_styling(full_width = FALSE)

Change_only_table

# ==================================================
# Step 27: Create and display a formatted table
# for the Doughnut data frame
# ==================================================
Doughnut_table <- kable(Doughnut) %>%
  kable_styling(full_width = FALSE)

Doughnut_table

# ==================================================
# Step 28: Create and display a formatted table
# for the Summary data frame
# ==================================================
Summary_table <- kable(Summary) %>%
  kable_styling(full_width = FALSE)

Summary_table


# ==================================================
# Step 29: Create and display a formatted table
# for the Population_v2 data frame
# ==================================================
Population_v2_table <- kable(Population_v2) %>%
  kable_styling(full_width = FALSE)

Population_v2_table