Government revenue, expenditure and main aggregates

Data - Eurostat

Info

LAST_DOWNLOAD

Code
tibble(LAST_DOWNLOAD = as.Date(file.info("~/iCloud/website/data/eurostat/gov_10a_main.RData")$mtime)) %>%
  print_table_conditional()
LAST_DOWNLOAD
2025-05-18

LAST_COMPILE

LAST_COMPILE
2025-05-18

Last

Code
gov_10a_main %>%
  group_by(time) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(time)) %>%
  head(1) %>%
  print_table_conditional()
time Nobs
2024 49638

unit

Code
gov_10a_main %>%
  left_join(unit, by = "unit") %>%
  group_by(unit, Unit) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
unit Unit Nobs
MIO_NAC Million units of national currency 531506
MIO_EUR Million euro 520061
PC_GDP Percentage of gross domestic product (GDP) 517977

sector

Code
gov_10a_main %>%
  left_join(sector, by = "sector") %>%
  group_by(sector, Sector) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
sector Sector Nobs
S1312 State government 326483
S13 General government 311440
S1314 Social security funds 307926
S1313 Local government 306377
S1311 Central government 304416
S1 Total economy 8505
S212 Institutions of the EU 4397

na_item

All

Code
gov_10a_main %>%
  left_join(na_item, by = "na_item") %>%
  group_by(na_item, Na_item) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

geo

Code
gov_10a_main %>%
  left_join(geo, by = "geo") %>%
  group_by(geo, Geo) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

time

Code
gov_10a_main %>%
  group_by(time) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(time)) %>%
  print_table_conditional()

Subsidies, Other taxes on production

2019

Code
gov_10a_main %>%
  filter(sector == "S13",
         time == "2019",
         unit == "PC_GDP",
         na_item %in% c("D39PAY", "D29PAY", "D29REC", "D39REC")) %>%
  select_if(~ n_distinct(.) > 1) %>%
  left_join(na_item, by = "na_item") %>%
  left_join(geo, by = "geo") %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = ifelse(geo %in% c("EU27_2020", "EA19"), "europe", Flag)) %>%
  select(-na_item) %>%
  spread(Na_item, values) %>%
  mutate(Net = `Other taxes on production, receivable` + `Other subsidies on production, receivable` - 
           `Other taxes on production, payable` - `Other subsidies on production, payable`) %>%
  arrange(-`Net`) %>%
  mutate(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 .}

2020

Code
gov_10a_main %>%
  filter(sector == "S13",
         time == "2020",
         unit == "PC_GDP",
         na_item %in% c("D39PAY", "D29PAY", "D29REC", "D39REC")) %>%
  select_if(~ n_distinct(.) > 1) %>%
  left_join(na_item, by = "na_item") %>%
  left_join(geo, by = "geo") %>%
  select(-na_item) %>%
  spread(Na_item, values) %>%
  mutate(Net = `Other taxes on production, receivable` + `Other subsidies on production, receivable` - 
           `Other taxes on production, payable` - `Other subsidies on production, payable`) %>%
  arrange(-`Net`) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

Subsidies

All

Code
gov_10a_main %>%
  filter(sector == "S13",
         time == "2020",
         unit == "PC_GDP",
         na_item %in% c("D39PAY")) %>%
  select(-unit, -time, -sector) %>%
  left_join(na_item, by = "na_item") %>%
  left_join(geo, by = "geo") %>%
  select(-na_item) %>%
  spread(Na_item, values) %>%
  arrange(-`Other subsidies on production, payable`) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

All

Code
gov_10a_main %>%
  filter(sector == "S13",
         time == "2019",
         unit == "PC_GDP",
         na_item %in% c("D39PAY"),
         geo %in% c("FR", "DE", "IT", "ES", "BE", "NL", "EA19", "EU27_2020", "SE")) %>%
  select(-unit, -time, -sector) %>%
  left_join(na_item, by = "na_item") %>%
  left_join(geo, by = "geo") %>%
  select(-na_item) %>%
  spread(Na_item, values) %>%
  arrange(-`Other subsidies on production, payable`) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = ifelse(geo %in% c("EA19", "EU27_2020"), "europe", Flag),
         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, Italy

Table, 2020

Code
gov_10a_main %>%
  filter(sector == "S13",
         time == "2020",
         unit == "PC_GDP",
         geo %in% c("FR", "DE", "IT")) %>%
  select_if(~ n_distinct(.) > 1) %>%
  left_join(na_item, by = "na_item") %>%
  left_join(geo, by = "geo") %>%
  select(-geo) %>%
  spread(Geo, values) %>%
  print_table_conditional()

Total Government Expenditure

Table, 2022

Code
gov_10a_main %>%
  filter(sector == "S13",
         time == "2022",
         unit == "PC_GDP",
         na_item %in% c("TE")) %>%
  select_if(~ n_distinct(.) > 1) %>%
  arrange(-values) %>%
  left_join(geo, by = "geo") %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

Table, 2021

Code
gov_10a_main %>%
  filter(sector == "S13",
         time == "2021",
         unit == "PC_GDP",
         na_item %in% c("TE")) %>%
  select_if(~ n_distinct(.) > 1) %>%
  arrange(-values) %>%
  left_join(geo, by = "geo") %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

Table, 2020

Code
gov_10a_main %>%
  filter(sector == "S13",
         time == "2020",
         unit == "PC_GDP",
         na_item %in% c("TE")) %>%
  select_if(~ n_distinct(.) > 1) %>%
  arrange(-values) %>%
  left_join(geo, by = "geo") %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

1995-

Code
gov_10a_main %>%
  filter(sector == "S13",
         unit == "PC_GDP",
         na_item %in% c("TE"),
         geo %in% c("FR", "IT", "BE", "EL")) %>%
  year_to_date %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  filter(date >= as.Date("1995-01-01")) %>%
  mutate(values= values / 100) %>%
  ggplot + theme_minimal() + xlab("") + ylab("Dépenses publiques (Points de PIB)") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 2),
                labels = percent_format(a = 1))

2000-

Code
gov_10a_main %>%
  filter(sector == "S13",
         unit == "PC_GDP",
         na_item %in% c("TE"),
         geo %in% c("FR", "IT", "BE", "EL")) %>%
  year_to_date %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  filter(date >= as.Date("2000-01-01")) %>%
  mutate(values= values / 100) %>%
  ggplot + theme_minimal() + xlab("") + ylab("Dépenses publiques (Points de PIB)") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 2),
                labels = percent_format(a = 1))

Code
load_data("eurostat/nama_10_gdp.RData")
gdp <- nama_10_gdp %>%
  filter(na_item == "B1GQ",
         # CLV10_MEUR: Chain linked volumes (2010), million euro
         unit == "CP_MNAC") %>%
  select(geo, time, gdp = values)
load_data("eurostat/nasa_10_nf_tr.RData")

data <- nasa_10_nf_tr %>%
  filter(geo %in% c("FR", "IT", "BE", "EL"),
         na_item == "D612",
         direct == "RECV",
         unit == "CP_MNAC",
         sector == "S13") %>%
  select(geo, time, values, sector) %>%
  left_join(gdp, by = c("geo", "time")) %>%
  mutate(values = values/gdp) %>%
  year_to_date %>%
  left_join(geo, by = "geo") %>%
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  filter(date >= as.Date("1995-01-01"))
data %>%
  ggplot + theme_minimal() + xlab("") + ylab("") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_3flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, .2),
                labels = percent_format(a = .1))