Table 2.4.5U. Personal Consumption Expenditures by Type of Product (A) (Q) (M) - U20405

Data - BEA

Code
gdp_adjustment <- read_parquet("gdp_adjustment.parquet")
nber_recessions <- read_parquet(here::here("data", "us", "nber_recessions.parquet"))
U20405_M <- read_parquet("U20405_M.parquet")
U20405_A <- read_parquet("U20405_A.parquet")
US_presidents <- read_parquet(here::here("data", "us", "US_presidents.parquet"))

Last observation: févr. 2020 (N = 398) · 2019 (N = 398)

First observation: 1959 (N = 342) · janv. 1959 (N = 342)

Last data update: 25 juil. 2026, 12:36

Last compile: 05 sept. 2026, 22:43

Ex 1: Changes in 2006-2009

Code
U20405_M |>
  filter(date %in% as.Date(c("2009-12-01", "2006-01-01"))) |>
  group_by(line, line_desc) |>
  arrange(date) |>
  summarise(value = value[2] - value[1]) %>%
  mutate(value = (value/1000) |> round() |> paste0(" Bn") %>% paste0("$ ", .)) |>
  select(Line = line, `Description` = line_desc, `Change 06-09` = value) %>%
  right_join(U20405_M |>
               filter(date == "2019-03-01",
                      value > 100000) %>%
               mutate(value = (value/1000) |> round() |> paste0(" Bn") %>% paste0("$ ", .)) |>
               select(Line = line, `Description` = line_desc, `March 2019` = value)) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Ex 2: 1979, 1989, 1999, 2009, 2019 Tables

Percentage

Code
U20405_M |>
  mutate(year = year(date)) |>
  filter(year %in% c(1959, 1979, 1999, 2019),
         month(date) == 1) |>
  group_by(year) |>
  mutate(value = round(100*value/value[1], 1)) |>
  ungroup() |>
  select(1, 2, 5, 6) |>
  spread(year, value) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Billions

Code
U20405_M |>
  mutate(year = year(date)) |>
  filter(year %in% c(1959, 1979, 1999, 2019),
         month(date) == 1) |>
  group_by(year) %>%
  mutate(value = (value/1000) |> round()) |>
  ungroup() |>
  select(1, 2, 5, 6) |>
  spread(year, value) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}