Central government personal income tax rates and thresholds - TABLE_I1

Data - OECD


CENTGOV_RATES

Code
TABLE_I1 %>%
  left_join(TABLE_I1_var$CENTGOV_RATES, by = "CENTGOV_RATES") %>%
  group_by(CENTGOV_RATES, Centgov_rates) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
CENTGOV_RATES Centgov_rates Nobs
01_MR 01 Marginal rate 874
01_TH 01 Threshold 775
02_MR 02 Marginal rate 745
02_TH 02 Threshold 680
03_MR 03 Marginal rate 657
03_TH 03 Threshold 555
04_MR 04 Marginal rate 555
04_TH 04 Threshold 403
05_MR 05 Marginal rate 403
PERS_ALL_AMNT Personal allowance 385
TAX_CRED_AMNT Tax credit 289
05_TH 05 Threshold 233
06_MR 06 Marginal rate 233
SURTAX_RATE Surtax rate 185
06_TH 06 Threshold 166
07_MR 07 Marginal rate 165
07_TH 07 Threshold 92
08_MR 08 Marginal rate 92
08_TH 08 Threshold 61
09_MR 09 Marginal rate 61
09_TH 09 Threshold 59
10_MR 10 Marginal rate 59
10_TH 10 Threshold 57
11_MR 11 Marginal rate 57
11_TH 11 Threshold 24
12_MR 12 Marginal rate 24
12_TH 12 Threshold 23
13_MR 13 Marginal rate 23
13_TH 13 Threshold 23
14_MR 14 Marginal rate 23
14_TH 14 Threshold 23
15_MR 15 Marginal rate 23
15_TH 15 Threshold 23
16_MR 16 Marginal rate 23
16_TH 16 Threshold 22
17_MR 17 Marginal rate 22
17_TH 17 Threshold 13
18_MR 18 Marginal rate 13
18_TH 18 Threshold 10
19_MR 19 Marginal rate 10
19_TH 19 Threshold 6
20_MR 20 Marginal rate 6
20_TH 20 Threshold 6
21_MR 21 Marginal rate 6
21_TH 21 Threshold 6
22_MR 22 Marginal rate 6
22_TH 22 Threshold 6
23_MR 23 Marginal rate 6

COU

Code
TABLE_I1 %>%
  left_join(TABLE_I1_var$COU, by = "COU") %>%
  group_by(COU, Cou) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Cou))),
         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 .}

Germany

Code
TABLE_I1 %>%
  filter(COU == "DEU") %>%
  year_to_date %>%
  left_join(TABLE_I1_var$CENTGOV_RATES, by = "CENTGOV_RATES") %>%
  filter(grepl("Marginal rate", Centgov_rates)) %>%
  ggplot() + theme_minimal() + ylab("Tax Rate (%)") + xlab("") +
  geom_line(aes(x = date, y = obsValue/100, color = Centgov_rates)) +
  scale_color_manual(values = viridis(4)[1:3]) +
  scale_x_date(breaks = seq(1920, 2025, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%y")) +
  theme(legend.position = c(0.65, 0.6),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 50, 5),
                     labels = percent_format(accuracy = 1))

France

Code
TABLE_I1 %>%
  filter(COU == "FRA") %>%
  year_to_date %>%
  left_join(TABLE_I1_var$CENTGOV_RATES, by = "CENTGOV_RATES") %>%
  filter(grepl("Marginal rate", Centgov_rates)) %>%
  ggplot() + theme_minimal() + ylab("Tax Rate (%)") + xlab("") +
  geom_line(aes(x = date, y = obsValue/100, color = Centgov_rates)) +
  scale_color_manual(values = viridis(8)[1:7]) +
  scale_x_date(breaks = seq(1920, 2025, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%y")) +
  theme(legend.position = c(0.65, 0.6),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 50, 5),
                     labels = percent_format(accuracy = 1))