Distribution of income by quantiles - EU-SILC and ECHP surveys - ilc_di01

Data - Eurostat

Info

Last observation: Annual: 2025 (N = 5,544)

First observation: Annual: 1995 (N = 1,400)

Last data update: 11 aoû 2026, 20:18. Last compile: 12 aoû 2026, 00:35

Structure

D10 / D1

Code
ilc_di01 |>
  filter(quant_inc %in% c("D1", "D10"),
         geo %in% c("FR", "DE"),
         unit == "EUR",
         statinfo == "SHARE") |>
  time_to_date() |>
  
  arrange(date, quant_inc, geo, values) |>
  spread(quant_inc, values) |>
  mutate(values = D10/D1) |>
  left_join(colors, by = c("Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = seq(0, 20, 1))

D9 / D1

Code
ilc_di01 |>
  filter(quant_inc %in% c("D1", "D9"),
         geo %in% c("FR", "DE"),
         unit == "EUR",
         statinfo == "SHARE") |>
  time_to_date() |>

  arrange(date, quant_inc, geo, values) |>
  spread(quant_inc, values) |>
  mutate(values = D9/D1) |>
  left_join(colors, by = c("Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags + theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("") +
  scale_y_continuous(breaks = seq(0, 20, 1))

France, Germany, Italy, Spain, Sweden

D10 / D1

Code
ilc_di01 |>
  filter(quant_inc %in% c("D1", "D10"),
         geo %in% c("FR", "DE", "IT", "ES", "SE"),
         unit == "EUR",
         statinfo == "SHARE") |>
  time_to_date() |>
  arrange(date, quant_inc, geo, values) |>
  spread(quant_inc, values) |>
  mutate(values = D10/D1) |>
  left_join(colors, by = c("Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal() + scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1995, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("D10 / D1 ratio") +
  scale_y_continuous(breaks = seq(0, 20, 1))

Latest Year by Country

Code
latest_y <- ilc_di01 |>
  filter(quant_inc %in% c("D1", "D10"), unit == "EUR", statinfo == "SHARE", !is.na(values)) |>
  summarise(m = max(time)) |>
  pull(m)

ilc_di01 |>
  filter(quant_inc %in% c("D1", "D9", "D10"),
         geo %in% c("FR", "DE", "IT", "ES", "SE", "PL", "PT", "NL"),
         unit == "EUR",
         statinfo == "SHARE",
         time == latest_y) |>
  select(Geo, quant_inc, values) |>
  spread(quant_inc, values) |>
  mutate(`D10/D1` = D10/D1, `D9/D1` = D9/D1) |>
  arrange(-`D10/D1`) |>
  print_table_conditional()
Geo D1 D10 D9 D10/D1 D9/D1
Spain 2.5 22.9 15.3 9.160000 6.120000
Italy 2.7 24.0 14.7 8.888889 5.444444
Sweden 2.6 22.1 14.4 8.500000 5.538462
France 3.1 24.6 14.2 7.935484 4.580645
Portugal 3.1 24.6 14.8 7.935484 4.774193
Germany 3.2 23.9 14.6 7.468750 4.562500
Netherlands 3.7 21.5 13.7 5.810811 3.702703
Poland 3.7 20.5 14.0 5.540540 3.783784