Income Distribution Database - IDD
Data - OECD
Info
DOWNLOAD_TIME
| DOWNLOAD_TIME |
|---|
| 2026-04-12 |
Last
| obsTime | Nobs |
|---|---|
| 2024 | 115 |
MEASURE
Code
IDD |>
group_by(MEASURE, Measure) |>
summarise(Nobs = n()) |>
arrange(-Nobs) %>%
{if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}AGE
Code
IDD |>
group_by(AGE, Age) |>
summarise(Nobs = n()) |>
arrange(-Nobs) %>%
{if (is_html_output()) print_table(.) else .}| AGE | Age | Nobs |
|---|---|---|
| _T | Total | 33117 |
| Y18T65 | From 18 to 65 years | 31597 |
| Y_GT65 | Over 65 years | 29730 |
| Y18T25 | From 18 to 25 years | 3416 |
| Y26T40 | From 26 to 40 years | 3416 |
| Y41T50 | From 41 to 50 years | 3416 |
| Y51T65 | From 51 to 65 years | 3416 |
| Y66T75 | From 66 to 75 years | 3416 |
| Y_LT18 | Less than 18 years | 3416 |
| Y_GE76 | 76 years or over | 3404 |
DEFINITION
Code
IDD |>
group_by(DEFINITION, Definition) |>
summarise(Nobs = n()) |>
arrange(-Nobs) %>%
{if (is_html_output()) print_table(.) else .}| DEFINITION | Definition | Nobs |
|---|---|---|
| D_CUR | Current definition | 105988 |
| D_PREV | Previous definition - with overlap year | 7124 |
| D_INC | Previous definition - without overlap year | 5232 |
REF_AREA
Code
IDD |>
group_by(REF_AREA, Ref_area) |>
summarise(Nobs = n()) |>
arrange(-Nobs) |>
mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Ref_area))),
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 .}France
GINI and GINIB
Code
IDD |>
filter(MEASURE %in% c("INC_MRKT_GINI", "INC_DISP_GINI"),
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA == "FRA") |>
year_to_date() |>
ggplot() + ylab("Gini (Market, Disposable Income)") + xlab("") + theme_minimal() +
geom_line(aes(x = date, y = obsValue, color = Measure)) +
scale_color_manual(values = viridis(3)[1:2]) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(0, 60, 5),
limits = c(0.2, 0.55)) +
theme(legend.position = c(0.3, 0.9),
legend.title = element_blank())
P90/P10 and S80/S20
(ref:P90P10-S80S20-FRA) Disposable Income Decile and Quintile Ratios
Code
IDD |>
filter(MEASURE %in% c("D9_1_INC_DISP", "QR_INC_DISP"),
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA == "FRA") |>
year_to_date() |>
ggplot() + ylab("P90/P10 and S80/S20") + xlab("") + theme_minimal() +
geom_line(aes(x = date, y = obsValue, color = Measure)) +
scale_color_manual(values = viridis(3)[1:2]) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(breaks = seq(0, 60, 0.1)) +
theme(legend.position = c(0.3, 0.9),
legend.title = element_blank())
Germany
GINI and GINIB
(ref:GINI-GINIB-DEU) Gini Indicators in Germany: Market and Disposable Income
Code
IDD |>
filter(MEASURE %in% c("INC_MRKT_GINI", "INC_DISP_GINI"),
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA == "DEU") |>
year_to_date() |>
ggplot() + ylab("Gini (Market, Disposable Income)") + xlab("") + theme_minimal() +
geom_line(aes(x = date, y = obsValue, color = Measure)) +
scale_color_manual(values = viridis(3)[1:2]) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(0, 60, 5),
limits = c(0.2, 0.55)) +
theme(legend.position = c(0.3, 0.9),
legend.title = element_blank())
P90/P10 and S80/S20
(ref:P90P10-S80S20-DEU) Disposable Income Decile and Quintile Ratios
Code
IDD |>
filter(MEASURE %in% c("D9_1_INC_DISP", "QR_INC_DISP"),
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA == "DEU",
METHODOLOGY == "METH2012") |>
year_to_date() |>
ggplot() + ylab("P90/P10 and S80/S20") + xlab("") + theme_minimal() +
geom_line(aes(x = date, y = obsValue, color = Measure)) +
scale_color_manual(values = viridis(3)[1:2]) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(breaks = seq(0, 60, 0.1)) +
theme(legend.position = c(0.3, 0.9),
legend.title = element_blank())
Gini
Table
Code
IDD |>
filter(MEASURE == "INC_DISP_GINI",
AGE == "_T",
obsTime %in% c("2018", "1998", "2008")) |>
select(-REF_AREA) %>%
select_if(~ n_distinct(.) > 1) |>
spread(obsTime, obsValue) |>
arrange(`2018`) |>
mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Ref_area))),
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 .}France, Germany, United States
Code
IDD |>
filter(MEASURE == "INC_DISP_GINI",
AGE == "_T",
REF_AREA %in% c("FRA", "DEU", "USA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_3flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(0, 50, 2)) +
ylab("Gini Index") + xlab("")
Inequality in Germany and France
All population
Code
IDD |>
filter(MEASURE == "INC_DISP_GINI",
AGE == "_T",
REF_AREA %in% c("FRA", "DEU")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(0, 50, 2)) +
ylab("Gini Index") + xlab("")
Age group 76+: mean disposable income (current prices)
Code
IDD |>
filter(MEASURE == "INC_DISP",
AGE == "Y_GE76",
REF_AREA %in% c("FRA", "DEU"),
DEFINITION == "D_CUR") |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(10000, 50000, 1000)) +
ylab("Age group 76+: mean disposable income (current prices)") + xlab("")
Age group 66-75: mean disposable income (current prices)
Code
IDD |>
filter(MEASURE == "INC_DISP",
AGE == "Y66T75",
REF_AREA %in% c("FRA", "DEU"),
DEFINITION == "D_CUR") |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(10000, 50000, 1000)) +
ylab("Age group 66-75: mean disposable income (current prices)") + xlab("")
Age group 41-50: mean disposable income (current prices)
Code
IDD |>
filter(MEASURE == "INC_DISP",
AGE == "Y41T50",
REF_AREA %in% c("FRA", "DEU"),
DEFINITION == "D_CUR") |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(10000, 50000, 1000)) +
ylab("Age group 41-50: mean disposable income (current prices)") + xlab("")
Age group 26-40: mean disposable income (current prices)
Code
# pdf(encoding = "ISOLatin9.enc")
IDD |>
filter(MEASURE == "INC_DISP",
AGE == "Y26T40",
REF_AREA %in% c("FRA", "DEU"),
DEFINITION == "D_CUR") |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(10000, 50000, 1000),
labels = scales::dollar_format(accuracy = 1, suffix = "\u20ac", prefix = "")) +
ylab("Age group 26-40: mean disposable income (current prices)") + xlab("")
INCHCTOTAL
Code
IDD |>
filter(MEASURE == "INC_DISP",
AGE == "Y18T65",
REF_AREA %in% c("FRA", "DEU"),
DEFINITION == "D_CUR") |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(10000, 50000, 1000),
labels = scales::dollar_format(accuracy = 1, suffix = "\u20ac", prefix = "")) +
ylab("All working-age household types: mean disposable income") + xlab("")
P90/P10 disposable income decile ratio
Code
IDD |>
filter(MEASURE == "D9_1_INC_DISP",
REF_AREA %in% c("FRA", "DEU"),
DEFINITION == "D_CUR",
AGE == "_T") |>
year_to_date() |>
arrange(REF_AREA, date) |>
filter(date >= as.Date("1994-01-01")) |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(1, 5, 0.1)) +
ylab("P90/P10 disposable income decile ratio") + xlab("")
P50/P10 disposable income decile ratio
Code
IDD |>
filter(MEASURE == "D5_1_INC_DISP",
REF_AREA %in% c("FRA", "DEU"),
DEFINITION == "D_CUR",
AGE == "_T") |>
year_to_date() |>
arrange(REF_AREA, date) |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(1, 5, 0.1)) +
ylab("P90/P10 disposable income decile ratio") + xlab("")
S80/S20 disposable income quintile ratio
Code
IDD |>
filter(MEASURE == "QR_INC_DISP",
REF_AREA %in% c("FRA", "DEU"),
DEFINITION == "D_CUR",
AGE == "_T") |>
year_to_date() |>
arrange(REF_AREA, date) |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(1, 5, 0.1)) +
ylab("S80/S20 disposable income quintile share") + xlab("")
Poverty (France, Germany)
PVT5A
Code
IDD |>
filter(MEASURE == "PR_INC_DISP", POVERTY_LINE == "PL_50",
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA %in% c("DEU", "FRA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-7, 50, 1),
labels = percent_format(accuracy = 1)) +
ylab("Poverty rate after taxes and transfers, Poverty line 50%") + xlab("")
PVT5B
Code
IDD |>
filter(MEASURE == "PR_INC_MRKT", POVERTY_LINE == "PL_50",
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA %in% c("DEU", "FRA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-7, 50, 1),
labels = percent_format(accuracy = 1)) +
ylab("Poverty rate before taxes and transfers, Poverty line 50%") + xlab("")
PALMA
Code
IDD |>
filter(MEASURE == "PAL_INC_DISP",
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA %in% c("DEU", "FRA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(-7, 50, 0.05)) +
ylab("Palma Ratio") + xlab("")
PVTAATOTAL
Code
IDD |>
filter(MEASURE == "PR_INC_DISP", POVERTY_LINE == "PL_60",
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA %in% c("DEU", "FRA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-7, 50, 1),
labels = percent_format(accuracy = 1)) +
ylab("Poverty Rate") + xlab("")
GINIB
Code
IDD |>
filter(MEASURE == "INC_MRKT_GINI",
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA %in% c("DEU", "FRA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-7, 60, 1),
labels = percent_format(accuracy = 1)) +
ylab("Gini (Market Income)") + xlab("")
Poverty rate after taxes and transfers
Code
IDD |>
filter(MEASURE == "PR_INC_DISP", POVERTY_LINE == "PL_50",
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA %in% c("DEU", "FRA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-7, 50, 1),
labels = percent_format(accuracy = 1)) +
ylab("Poverty rate after taxes and transfers, Poverty line 50%") + xlab("")
Poverty rate before taxes and transfers
Code
IDD |>
filter(MEASURE == "PR_INC_MRKT", POVERTY_LINE == "PL_50",
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA %in% c("DEU", "FRA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-7, 50, 1),
labels = percent_format(accuracy = 1)) +
ylab("Poverty rate before taxes and transfers, Poverty line 50%") + xlab("")
Palma
Code
IDD |>
filter(MEASURE == "PAL_INC_DISP",
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA %in% c("DEU", "FRA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(-7, 50, 0.05)) +
ylab("Palma Ratio") + xlab("")
Poverty Rate
Code
IDD |>
filter(MEASURE == "PR_INC_DISP", POVERTY_LINE == "PL_60",
DEFINITION == "D_CUR",
AGE == "_T",
REF_AREA %in% c("DEU", "FRA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_2flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-7, 50, 1),
labels = percent_format(accuracy = 1)) +
ylab("Poverty Rate") + xlab("")
Gini
Code
IDD |>
filter(MEASURE == "INC_DISP_GINI",
AGE == "_T",
REF_AREA %in% c("FRA", "DEU", "USA")) |>
year_to_date() |>
left_join(colors, by = c("Ref_area" = "country")) |>
ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) +
scale_color_identity() + theme_minimal() + add_3flags +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(0, 50, 2)) +
ylab("Gini Index") + xlab("")