1. Economic Data
One possible single plot view:
library(ggplot2)
library(forecast)
sts <- ts(scale(economics[-1], center = FALSE),
start = c(1967, 7), frequency = 12)
autoplot(sts)

An alternative scaling that emphasizes the behavior around 2008:
sec2008 <- as.numeric(economics[487, -1])
sec <- scale(economics[-1], center = FALSE, scale = sec2008)
autoplot(ts(sec, start = c(1967, 7), frequency = 12))

An alternative is to use multiple panels:
library(zoo)
ets <- ts(economics[-1], start = c(1967, 7), frequency = 12)
autoplot(as.zoo(ets)) + facet_grid(Series ~ ., scales = "free")

Some notes:
Population has risen by about 50% over the period.
Personal consumption does not appear to be inflation-adjusted.
The series has grown steadily, with a noticable drop at the 2008
recession.
The personal savings rate has a decreasing trend; fluctuations
somewhat mirror the unemployment rate.
Unemplyment rate and median unemployment duration follow similar
patterns, with duration peaks lagging a little and recovering a little
more slowly.
2. Unemployment Rates
The state code for Iowa is 19. This can be used to filter down to the
Iowa data. An alternative is to split the Title variable
into county name cname and state code scode
components:
library(dplyr)
lausUS <- mutate(lausUS,
cname = sub(",.*", "", Title),
scode = sub(".*, ", "", Title))
You could also use tidyr::separate().
Extract the Iowa Data:
lausIA <- filter(lausUS, scode == "IA")
Compute average unemployment rates and identify counties with highest
and lowest rates:
avgIA <- group_by(lausIA, cname, State, County) |>
summarize(avg_unemp = mean(UnempRate, na.rm = TRUE)) |>
ungroup()
hi <- slice_max(avgIA, avg_unemp, n = 1)
lo <- slice_min(avgIA, avg_unemp, n = 1)
hi$cname
## [1] "Marshall County"
lo$cname
## [1] "Osceola County"
The monthly data for these counties can be extracted with
mmIA <- filter(lausIA, cname %in% c(lo$cname, hi$cname))
Using ggplot and an ordered factor for the period:
library(ggplot2)
library(forcats)
ggplot(mutate(mmIA, Period = fct_inorder(Period)),
aes(x = Period, y = UnempRate, group = cname, color = cname)) +
geom_line()

The dates can also be computed using ymd() and
months():
library(lubridate)
mmIA$date <- rep(ymd("2024-12-01") + months(0 : 13), each = 2)
ggplot(mmIA, aes(date, UnempRate, group = Title, color = Title)) +
geom_line()

Parsing the dates in thePeriod variable is also
possible, but needs care if you want your code to work in a non-English
locale. A vignette
for the readr package provides some background. One of many
possibilities is to use parse_date_time() from
lubridate:
library(lubridate)
mmIA <- mutate(mmIA, date = parse_date_time(Period, "my"))
You can also create a time series object, for example as
library(tidyr)
mmIAts <- select(mmIA, UnempRate, cname, Period) |>
pivot_wider(names_from = cname, values_from = UnempRate) |>
select(-Period) |>
ts(start = c(2024, 12), frequency = 12)
and take advantage of the autoplot() methods for time
series provided in the forecast package:
library(forecast)
autoplot(mmIAts)

County locations:
mlo <- map_data("county", "iowa") |>
filter(subregion == tolower(sub(" .*", "", lo$cname)))
mhi <- map_data("county", "iowa") |>
filter(subregion == tolower(sub(" .*", "", hi$cname)))
ggplot(map_data("county", "iowa"), aes(long, lat, group = group)) +
geom_polygon(, fill = NA, color = "black") +
coord_map() +
ggthemes::theme_map() +
geom_polygon(aes(fill = subregion), data = rbind(mlo, mhi))

LS0tCnRpdGxlOiAiQXNzaWdubWVudCA5IE5vdGVzIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cKLS0tCgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZSA9IEZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoY29sbGFwc2UgPSBUUlVFKQpgYGAKCiMjIDEuIEVjb25vbWljIERhdGEKPCEtLSBwcm9iIDcgb24gcCAyNDEgb2YgVW53aW4gLS0+CgpPbmUgcG9zc2libGUgc2luZ2xlIHBsb3QgdmlldzoKCmBgYHtyLCBjbGFzcy5zb3VyY2UgPSAiZm9sZC1oaWRlIn0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGZvcmVjYXN0KQpzdHMgPC0gdHMoc2NhbGUoZWNvbm9taWNzWy0xXSwgY2VudGVyID0gRkFMU0UpLAogICAgICAgICAgc3RhcnQgPSBjKDE5NjcsIDcpLCBmcmVxdWVuY3kgPSAxMikKYXV0b3Bsb3Qoc3RzKQpgYGAKCkFuIGFsdGVybmF0aXZlIHNjYWxpbmcgdGhhdCBlbXBoYXNpemVzIHRoZSBiZWhhdmlvciBhcm91bmQgMjAwODoKCmBgYHtyLCBjbGFzcy5zb3VyY2UgPSAiZm9sZC1oaWRlIn0Kc2VjMjAwOCA8LSBhcy5udW1lcmljKGVjb25vbWljc1s0ODcsIC0xXSkKc2VjIDwtIHNjYWxlKGVjb25vbWljc1stMV0sIGNlbnRlciA9IEZBTFNFLCBzY2FsZSA9IHNlYzIwMDgpCmF1dG9wbG90KHRzKHNlYywgc3RhcnQgPSBjKDE5NjcsIDcpLCBmcmVxdWVuY3kgPSAxMikpCmBgYAoKQW4gYWx0ZXJuYXRpdmUgaXMgdG8gdXNlIG11bHRpcGxlIHBhbmVsczoKCmBgYHtyLCBtZXNzYWdlID0gRkFMU0UsIGNsYXNzLnNvdXJjZSA9ICJmb2xkLWhpZGUifQpsaWJyYXJ5KHpvbykKZXRzIDwtIHRzKGVjb25vbWljc1stMV0sIHN0YXJ0ID0gYygxOTY3LCA3KSwgZnJlcXVlbmN5ID0gMTIpCmF1dG9wbG90KGFzLnpvbyhldHMpKSArIGZhY2V0X2dyaWQoU2VyaWVzIH4gLiwgc2NhbGVzID0gImZyZWUiKQpgYGAKClNvbWUgbm90ZXM6CgotIFBvcHVsYXRpb24gaGFzIHJpc2VuIGJ5IGFib3V0IDUwJSBvdmVyIHRoZSBwZXJpb2QuCgotIFBlcnNvbmFsIGNvbnN1bXB0aW9uIGRvZXMgbm90IGFwcGVhciB0byBiZSBpbmZsYXRpb24tYWRqdXN0ZWQuIFRoZQogIHNlcmllcyBoYXMgZ3Jvd24gc3RlYWRpbHksIHdpdGggYSBub3RpY2FibGUgZHJvcCBhdCB0aGUgMjAwOAogIHJlY2Vzc2lvbi4KCi0gVGhlIHBlcnNvbmFsIHNhdmluZ3MgcmF0ZSBoYXMgYSBkZWNyZWFzaW5nIHRyZW5kOyBmbHVjdHVhdGlvbnMKICBzb21ld2hhdCBtaXJyb3IgdGhlIHVuZW1wbG95bWVudCByYXRlLgoKLSBVbmVtcGx5bWVudCByYXRlIGFuZCBtZWRpYW4gdW5lbXBsb3ltZW50IGR1cmF0aW9uIGZvbGxvdyBzaW1pbGFyCiAgcGF0dGVybnMsIHdpdGggZHVyYXRpb24gcGVha3MgbGFnZ2luZyBhIGxpdHRsZSBhbmQgcmVjb3ZlcmluZyBhCiAgbGl0dGxlIG1vcmUgc2xvd2x5LgoKPCEtLSBodHRwOi8vd3d3LmluMjAxM2RvbGxhcnMuY29tLzE5NzAtZG9sbGFycy1pbi0yMDE2P2Ftb3VudD0xMDAgLS0+CgojIyAyLiBVbmVtcGxveW1lbnQgUmF0ZXMKCmBgYHtyLCBlY2hvID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KbGF1czE0ZmlsZSA8LSAibGF1Y250eWN1cjE0LTIwMjUueGxzeCIKaWYgKCEgZmlsZS5leGlzdHMobGF1czE0ZmlsZSkpIHsKICAgIGxhdXMxNFVSTCA8LSBwYXN0ZTAoImh0dHA6Ly93d3cuc3RhdC51aW93YS5lZHUvfmx1a2UvZGF0YS9sYXVzLyIsCiAgICAgICAgICAgICAgICAgICAgICAgIGxhdXMxNGZpbGUpCiAgICBkb3dubG9hZC5maWxlKGxhdXMxNFVSTCwgbGF1czE0ZmlsZSwgbW9kZSA9ICJ3YiIpCn0KbGF1c1VTIDwtIHJlYWR4bDo6cmVhZF94bHN4KGxhdXMxNGZpbGUsIHNraXAgPSAyKQpmb290c3RhcnQgPC0gd2hpY2goaXMubmEobGF1c1VTWzFdKSkKbGF1c1VTIDwtIGxhdXNVU1sxOihucm93KGxhdXNVUykgLSAyKSxdCm5hbWVzKGxhdXNVUykgPC0gIGMoIkxBVVNBcmVhQ29kZSIsICJTdGF0ZSIsICJDb3VudHkiLAogICAgICAgICAgICAgICAgICAgICJUaXRsZSIsICJQZXJpb2QiLAogICAgICAgICAgICAgICAgICAgICJMYWJvckZvcmNlIiwgIkVtcGxveWVkIiwKICAgICAgICAgICAgICAgICAgICAiVW5lbXBsb3llZCIsICJVbmVtcFJhdGUiKQpsYXVzVVMkUGVyaW9kIDwtIHN1YnN0cihsYXVzVVMkUGVyaW9kLCAxLCA2KQpgYGAKClRoZSBzdGF0ZSBjb2RlIGZvciBJb3dhIGlzIDE5LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGZpbHRlciBkb3duIHRvIHRoZQpJb3dhIGRhdGEuIEFuIGFsdGVybmF0aXZlIGlzIHRvIHNwbGl0IHRoZSBgVGl0bGVgIHZhcmlhYmxlIGludG8gY291bnR5Cm5hbWUgYGNuYW1lYCBhbmQgc3RhdGUgY29kZSBgc2NvZGVgIGNvbXBvbmVudHM6CgpgYGB7ciwgbWVzc2FnZSA9IEZBTFNFfQpsaWJyYXJ5KGRwbHlyKQpsYXVzVVMgPC0gbXV0YXRlKGxhdXNVUywKICAgICAgICAgICAgICAgICBjbmFtZSA9IHN1YigiLC4qIiwgIiIsIFRpdGxlKSwKICAgICAgICAgICAgICAgICBzY29kZSA9IHN1YigiLiosICIsICIiLCBUaXRsZSkpCmBgYAoKWW91IGNvdWxkIGFsc28gdXNlIGB0aWR5cjo6c2VwYXJhdGUoKWAuCgpFeHRyYWN0IHRoZSBJb3dhIERhdGE6CgpgYGB7cn0KbGF1c0lBIDwtIGZpbHRlcihsYXVzVVMsIHNjb2RlID09ICJJQSIpCmBgYAoKQ29tcHV0ZSBhdmVyYWdlIHVuZW1wbG95bWVudCByYXRlcyBhbmQgaWRlbnRpZnkgY291bnRpZXMgd2l0aCBoaWdoZXN0CmFuZCBsb3dlc3QgcmF0ZXM6CgpgYGB7ciwgbWVzc2FnZSA9IEZBTFNFfQphdmdJQSA8LSBncm91cF9ieShsYXVzSUEsIGNuYW1lLCBTdGF0ZSwgQ291bnR5KSB8PgogICAgc3VtbWFyaXplKGF2Z191bmVtcCA9IG1lYW4oVW5lbXBSYXRlLCBuYS5ybSA9IFRSVUUpKSB8PgogICAgdW5ncm91cCgpCmhpIDwtIHNsaWNlX21heChhdmdJQSwgYXZnX3VuZW1wLCBuID0gMSkKbG8gPC0gc2xpY2VfbWluKGF2Z0lBLCBhdmdfdW5lbXAsIG4gPSAxKQpoaSRjbmFtZQpsbyRjbmFtZQpgYGAKClRoZSBtb250aGx5IGRhdGEgZm9yIHRoZXNlIGNvdW50aWVzIGNhbiBiZSBleHRyYWN0ZWQgd2l0aAoKYGBge3J9Cm1tSUEgPC0gZmlsdGVyKGxhdXNJQSwgY25hbWUgJWluJSBjKGxvJGNuYW1lLCBoaSRjbmFtZSkpCmBgYAoKKiBUbyBhbGxvdyBjb21wYXJpc29uIGl0IGlzIGJlc3QgdG8gcGxvdCB0aGVzZSBpbiBhIHNpbmdsZSBwbG90IG9yIGFzCiAgc3RhY2tlZCBmYWNldGVkIHBsb3RzLgoKKiBUaGUgdGltZSBwZXJpb2QgbmVlZHMgdG8gYmUgaGFuZGxlZCBwcm9wZXJseSB0byBnZXQgdGhlIHJpZ2h0IG9yZGVyLgoKVXNpbmcgZ2dwbG90IGFuZCBhbiBvcmRlcmVkIGZhY3RvciBmb3IgdGhlIHBlcmlvZDoKCmBgYHtyLCBmaWcud2lkdGggPSAxMH0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGZvcmNhdHMpCmdncGxvdChtdXRhdGUobW1JQSwgUGVyaW9kID0gZmN0X2lub3JkZXIoUGVyaW9kKSksCiAgICAgICBhZXMoeCA9IFBlcmlvZCwgeSA9IFVuZW1wUmF0ZSwgZ3JvdXAgPSBjbmFtZSwgY29sb3IgPSBjbmFtZSkpICsKICAgIGdlb21fbGluZSgpCmBgYAoKVGhlIGRhdGVzIGNhbiBhbHNvIGJlIGNvbXB1dGVkIHVzaW5nIGB5bWQoKWAgYW5kIGBtb250aHMoKWA6CgpgYGB7ciwgbWVzc2FnZSA9IEZBTFNFLCBmaWcud2lkdGggPSAxMH0KbGlicmFyeShsdWJyaWRhdGUpCm1tSUEkZGF0ZSA8LSByZXAoeW1kKCIyMDI0LTEyLTAxIikgKyBtb250aHMoMCA6IDEzKSwgZWFjaCA9IDIpCgpnZ3Bsb3QobW1JQSwgYWVzKGRhdGUsIFVuZW1wUmF0ZSwgZ3JvdXAgPSBUaXRsZSwgY29sb3IgPSBUaXRsZSkpICsKICAgIGdlb21fbGluZSgpCmBgYAoKUGFyc2luZyB0aGUgZGF0ZXMgaW4gdGhlYFBlcmlvZGAgdmFyaWFibGUgaXMgYWxzbyBwb3NzaWJsZSwgYnV0IG5lZWRzCmNhcmUgaWYgeW91IHdhbnQgeW91ciBjb2RlIHRvIHdvcmsgaW4gYSBub24tRW5nbGlzaCBsb2NhbGUuIEEKW3ZpZ25ldHRlXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy9wYWNrYWdlPXJlYWRyL3ZpZ25ldHRlcy9sb2NhbGVzLmh0bWwpCmZvciB0aGUgYHJlYWRyYCBwYWNrYWdlIHByb3ZpZGVzIHNvbWUgYmFja2dyb3VuZC4gT25lIG9mIG1hbnkKcG9zc2liaWxpdGllcyBpcyB0byB1c2UgYHBhcnNlX2RhdGVfdGltZSgpYCBmcm9tIGBsdWJyaWRhdGVgOgoKYGBge3J9CmxpYnJhcnkobHVicmlkYXRlKQptbUlBIDwtIG11dGF0ZShtbUlBLCBkYXRlID0gcGFyc2VfZGF0ZV90aW1lKFBlcmlvZCwgIm15IikpCmBgYAoKWW91IGNhbiBhbHNvIGNyZWF0ZSBhIHRpbWUgc2VyaWVzIG9iamVjdCwgZm9yIGV4YW1wbGUgYXMKYGBge3J9CmxpYnJhcnkodGlkeXIpCm1tSUF0cyA8LSBzZWxlY3QobW1JQSwgVW5lbXBSYXRlLCBjbmFtZSwgUGVyaW9kKSB8PgogICAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNuYW1lLCB2YWx1ZXNfZnJvbSA9IFVuZW1wUmF0ZSkgfD4KICAgIHNlbGVjdCgtUGVyaW9kKSB8PgogICAgdHMoc3RhcnQgPSBjKDIwMjQsIDEyKSwgZnJlcXVlbmN5ID0gMTIpCmBgYAoKYW5kIHRha2UgYWR2YW50YWdlIG9mIHRoZSBgYXV0b3Bsb3QoKWAgbWV0aG9kcyBmb3IgdGltZSBzZXJpZXMKcHJvdmlkZWQgaW4gdGhlIGBmb3JlY2FzdGAgcGFja2FnZToKCmBgYHtyLCBtZXNzYWdlID0gRkFMU0UsIGZpZy53aWR0aCA9IDEwfQpsaWJyYXJ5KGZvcmVjYXN0KQphdXRvcGxvdChtbUlBdHMpCmBgYAoKQ291bnR5IGxvY2F0aW9uczoKCmBgYHtyfQptbG8gPC0gbWFwX2RhdGEoImNvdW50eSIsICJpb3dhIikgfD4KICAgIGZpbHRlcihzdWJyZWdpb24gPT0gdG9sb3dlcihzdWIoIiAuKiIsICIiLCBsbyRjbmFtZSkpKQptaGkgPC0gbWFwX2RhdGEoImNvdW50eSIsICJpb3dhIikgfD4KICAgIGZpbHRlcihzdWJyZWdpb24gPT0gdG9sb3dlcihzdWIoIiAuKiIsICIiLCBoaSRjbmFtZSkpKQpnZ3Bsb3QobWFwX2RhdGEoImNvdW50eSIsICJpb3dhIiksIGFlcyhsb25nLCBsYXQsIGdyb3VwID0gZ3JvdXApKSArCiAgICBnZW9tX3BvbHlnb24oLCBmaWxsID0gTkEsIGNvbG9yID0gImJsYWNrIikgKwogICAgY29vcmRfbWFwKCkgKwogICAgZ2d0aGVtZXM6OnRoZW1lX21hcCgpICsKICAgIGdlb21fcG9seWdvbihhZXMoZmlsbCA9IHN1YnJlZ2lvbiksIGRhdGEgPSByYmluZChtbG8sIG1oaSkpCmBgYAo=