Incidence of involuntary part time workers - INVPT_I

Data - OECD

Info

Last observation: A: 2022 (N = 6701)

First observation: A: 1976 (N = 142)

Last data update: 02 aoû 2026, 08:59. Last compile: 18 aoû 2026, 00:33

Structure

obsTime

Code
INVPT_I |>
  group_by(obsTime) |>
  summarise(Nobs = n()) |>
  arrange(desc(obsTime)) |>
  print_table_conditional()

Share of involuntary part-timers (% of part-time employment)

Table

Code
INVPT_I |>
  filter(SEX == "MW",
         EMPSTAT == "TE",
         AGE == "900000",
         SERIES == "SHINV_PT") |>
  left_join(INVPT_I_var$COUNTRY, by = "COUNTRY") |>
  group_by(COUNTRY, Country) |>
  summarise(Nobs = n(),
            obsTime = last(obsTime),
            obsValue = last(obsValue)) |>
  arrange(-obsValue) |>
  mutate(Flag = gsub(" ", "-", str_to_lower(Country)),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) |>
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

Canada, United Kingdom, United States

Code
INVPT_I |>
  filter(COUNTRY %in% c("CAN", "USA", "GBR", "AUS"),
         SEX == "MW",
         EMPSTAT == "TE",
         AGE == "900000",
         SERIES == "SHINV_PT") |>
  year_to_date() |>
  left_join(INVPT_I_var$COUNTRY, by = "COUNTRY") |>
  rename(Location = Country) |>
  mutate(obsValue = obsValue / 100) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + theme_minimal() + ylab("Share of involuntary part-timers (% of part-time employment)") + xlab("") +
  geom_line(aes(x = date, y = obsValue, color = color)) +
  scale_color_identity() + add_4flags +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 2),
                     labels = scales::percent_format(accuracy = 1))

France, United Kingdom, Germany

Code
INVPT_I |>
  filter(COUNTRY %in% c("FRA", "DEU", "GBR"),
         SEX == "MW",
         EMPSTAT == "TE",
         AGE == "900000",
         SERIES == "SHINV_PT") |>
  year_to_date() |>
  left_join(INVPT_I_var$COUNTRY, by = "COUNTRY") |>
  rename(Location = Country) |>
  mutate(obsValue = obsValue / 100) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + theme_minimal() + ylab("Share of involuntary part-timers (% of part-time employment)") + xlab("") +
  geom_line(aes(x = date, y = obsValue, color = color)) +
  scale_color_identity() + add_3flags +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 2),
                     labels = scales::percent_format(accuracy = 1))

Italy, Spain, Portugal, Greece

Code
INVPT_I |>
  filter(COUNTRY %in% c("ITA", "ESP", "PRT", "GRC"),
         SEX == "MW",
         EMPSTAT == "TE",
         AGE == "900000",
         SERIES == "SHINV_PT") |>
  year_to_date() |>
  left_join(INVPT_I_var$COUNTRY, by = "COUNTRY") |>
  rename(Location = Country) |>
  mutate(obsValue = obsValue / 100) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + theme_minimal() + ylab("Share of involuntary part-timers (% of part-time employment)") + xlab("") +
  geom_line(aes(x = date, y = obsValue, color = color)) +
  scale_color_identity() + add_4flags +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 2),
                     labels = scales::percent_format(accuracy = 1))

France, Italy, Spain, Portugal, Greece

Code
INVPT_I |>
  filter(COUNTRY %in% c("FRA", "ITA", "ESP", "PRT", "GRC"),
         SEX == "MW",
         EMPSTAT == "TE",
         AGE == "900000",
         SERIES == "SHINV_PT") |>
  year_to_date() |>
  left_join(INVPT_I_var$COUNTRY, by = "COUNTRY") |>
  rename(Location = Country) |>
  mutate(obsValue = obsValue / 100) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + theme_minimal() + ylab("Share of involuntary part-timers (% of part-time employment)") + xlab("") +
  geom_line(aes(x = date, y = obsValue, color = color)) +
  scale_color_identity() + add_5flags +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 2),
                     labels = scales::percent_format(accuracy = 1))