Non-financial transactions

Data - Eurostat

Info

Last observation: Quarterly: 2026Q1 (N = 30,902)

First observation: Quarterly: 1980Q1 (N = 1,270)

Last data update: 14 aoû 2026, 01:18. Last compile: 14 aoû 2026, 04:27

Structure

Belgium, Luxembourg

All

Code
nasq_10_nf_tr |>
  filter(geo %in% c("BE", "LU", "FR", "DE", "EA20"),
         na_item %in% c("B2A3G", "B1G"),
         direct == "PAID",
         unit == "CP_MNAC",
         s_adj == "SCA",
         sector == "S11") |>
  select(geo, Geo, time, values, na_item) |>
  spread(na_item, values) |>
  mutate(values = B2A3G/B1G) |>
  quarter_to_date() |>
  filter(date >= as.Date("1995-01-01")) |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  na.omit() |>
  ggplot() + theme_minimal() + xlab("") + ylab("% of Gross Value Added") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  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, 1),
                labels = percent_format(a = 1))

2010

Code
nasq_10_nf_tr |>
  filter(geo %in% c("BE", "LU", "FR", "DE", "EU"),
         na_item %in% c("B2A3G", "B1G"),
         direct == "PAID",
         unit == "CP_MNAC",
         s_adj == "SCA",
         sector == "S11") |>
  select(geo, Geo, time, values, na_item) |>
  spread(na_item, values) |>
  mutate(values = B2A3G/B1G) |>
  quarter_to_date() |>
  filter(date >= as.Date("2010-01-01")) |>
  
  mutate(Geo = ifelse(geo == "EU27_2020", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  na.omit() |>
  ggplot() + theme_minimal() + xlab("") + ylab("% of Gross Value Added") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 1),
                labels = percent_format(a = 1))

France, Germany, Italy, Spain, Europe

Operating surplus and mixed income, gross - B2A3G, S11

Table

Code
load_data("eurostat/geo.Rdata")
nasq_10_nf_tr |>
  filter(na_item %in% c("B2A3G", "B1G"),
         direct == "PAID",
         unit == "CP_MNAC",
         s_adj == "SCA",
         sector == "S11",
         time %in% c("2022Q4", "2021Q4", "2019Q4")) |>
  
  select(geo, Geo, time, values, na_item) |>
  spread(na_item, values) |>
  mutate(values = B2A3G/B1G) |>
  select(-B2A3G, -B1G) |>
  spread(time, values) |>
  mutate(`2021Q4-2022Q4` = `2022Q4` - `2021Q4`,
         `2019Q4-2022Q4` = `2022Q4` - `2019Q4`) |>
  arrange(-`2019Q4-2022Q4`) |>
  print_table_conditional()
geo Geo 2019Q4 2021Q4 2022Q4 2021Q4-2022Q4 2019Q4-2022Q4
NO Norway 0.4849330 0.6270687 0.6506859 0.0236173 0.1657529
EL Greece 0.3612275 0.3852907 0.4424808 0.0571901 0.0812533
NL Netherlands 0.3993802 0.4454876 0.4395694 -0.0059182 0.0401892
IE Ireland 0.7428724 0.7639405 0.7782141 0.0142736 0.0353417
DK Denmark 0.4165516 0.4682542 0.4514557 -0.0167984 0.0349042
PL Poland 0.4625543 0.4574017 0.4901147 0.0327131 0.0275604
BE Belgium 0.4260504 0.4395690 0.4534174 0.0138485 0.0273670
DE Germany 0.3696053 0.4036642 0.3958101 -0.0078541 0.0262048
IT Italy 0.4341158 0.4497484 0.4597518 0.0100033 0.0256360
EU27_2020 European Union - 27 countries (from 2020) 0.4018518 0.4200249 0.4192523 -0.0007725 0.0174006
EA21 Euro area – 21 countries (from 2026) 0.3969058 0.4150413 0.4140754 -0.0009659 0.0171696
CZ Czechia 0.4491002 0.4333004 0.4662111 0.0329107 0.0171108
EE Estonia 0.4462676 0.4563201 0.4549820 -0.0013381 0.0087144
PT Portugal 0.3810113 0.3511777 0.3882752 0.0370975 0.0072639
FR France 0.3026377 0.3094957 0.3071477 -0.0023480 0.0045100
FI Finland 0.4154136 0.4298641 0.4191657 -0.0106984 0.0037521
ES Spain 0.4116541 0.3847911 0.4098811 0.0250900 -0.0017731
AT Austria 0.4072483 0.4059177 0.4050478 -0.0008698 -0.0022005
RO Romania 0.5246418 0.5418981 0.5161538 -0.0257443 -0.0084879
SE Sweden 0.3697364 0.3842477 0.3589587 -0.0252891 -0.0107777
HU Hungary 0.4466520 0.4456604 0.4257870 -0.0198734 -0.0208650

All

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item == "B2A3G",
         direct == "PAID",
         unit == "CP_MNAC",
         s_adj == "NSA",
         sector == "S11") |>
  select(geo, Geo, time, values, sector) |>
  left_join(gdp, by = c("geo", "time")) |>
  mutate(values = values/gdp) |>
  quarter_to_date() |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  na.omit() |>
  ggplot() + theme_minimal() + xlab("") + ylab("") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 10), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 1),
                labels = percent_format(a = 1))

1998-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item == "B2A3G",
         direct == "PAID",
         unit == "CP_MNAC",
         s_adj == "NSA",
         sector == "S11") |>
  select(geo, Geo, time, values, sector) |>
  left_join(gdp, by = c("geo", "time")) |>
  mutate(values = values/gdp) |>
  quarter_to_date() |>
  filter(date >= as.Date("1998-01-01")) |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  na.omit() |>
  ggplot() + theme_minimal() + xlab("") + ylab("") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  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, 1),
                labels = percent_format(a = 1))

2010-

NSA

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item == "B2A3G",
         direct == "PAID",
         unit == "CP_MNAC",
         s_adj == "NSA",
         sector == "S11") |>
  select(geo, Geo, time, values, sector) |>
  left_join(gdp, by = c("geo", "time")) |>
  mutate(values = values/gdp) |>
  quarter_to_date() |>
  filter(date >= as.Date("2010-01-01")) |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  na.omit() |>
  ggplot() + theme_minimal() + xlab("") + ylab("") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 1),
                labels = percent_format(a = 1))

SCA

RECV
Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item == "B2A3G",
         direct == "RECV",
         unit == "CP_MNAC",
         s_adj == "SCA",
         sector == "S11") |>
  select(geo, Geo, time, values, sector) |>
  left_join(gdp, by = c("geo", "time")) |>
  mutate(values = values/gdp) |>
  quarter_to_date() |>
  filter(date >= as.Date("2010-01-01")) |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  na.omit() |>
  ggplot() + theme_minimal() + xlab("") + ylab("% of GDP") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 1),
                labels = percent_format(a = 1))

2017-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item == "B2A3G",
         direct == "PAID",
         unit == "CP_MNAC",
         s_adj == "NSA",
         sector == "S11") |>
  select(geo, Geo, time, values, sector) |>
  left_join(gdp, by = c("geo", "time")) |>
  mutate(values = values/gdp) |>
  quarter_to_date() |>
  filter(date >= as.Date("2017-01-01")) |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  na.omit() |>
  ggplot() + theme_minimal() + xlab("") + ylab("") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 1),
                labels = percent_format(a = 1))

Net lending / Borrowing: financial saving rate (B9)

France, Germany, Italy, Spain

B9

B9

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR"),
         na_item == "B9",
         s_adj == "NSA",
         #direct == "PAID",
         unit == "CP_MNAC") |>
  
  left_join(gdp_adj, by = c("geo", "time", "s_adj")) |>
  mutate(values = values/gdp) |>
  quarter_to_date() |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  filter(date >= as.Date("1999-01-01")) |>
  arrange(desc(date)) |>
  select(date, values, Sector, direct) |>
  ggplot() + theme_minimal() + xlab("") + ylab("% of GDP") +
  geom_line(aes(x = date, y = values, color = Sector, linetype = direct)) +
  theme(legend.position = c(0.3, 0.8),
        legend.title = element_blank()) +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 1),
                labels = percent_format(a = 1))

1999-

% of GDP

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item == "B9",
         #s_adj == "SCA",
         #direct == "PAID",
         unit == "CP_MNAC",
         sector %in% c("S14_S15")) |>
  select(geo, Geo, time, values, sector) |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = values/B1GQ_NSA_CPMNAC) |>
  quarter_to_date() |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  filter(date >= as.Date("1999-01-01")) |>
  ggplot() + theme_minimal() + xlab("") + ylab("% of GDP") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 1),
                labels = percent_format(a = 1))

1999-

% of GDP

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item == "B9",
         s_adj == "SCA",
         #direct == "PAID",
         unit == "CP_MNAC",
         sector %in% c("S13")) |>
  select(geo, Geo, time, values, sector) |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = values/B1GQ_NSA_CPMNAC) |>
  quarter_to_date() |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  filter(date >= as.Date("1999-01-01")) |>
  ggplot() + theme_minimal() + xlab("") + ylab("% of GDP") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 100, 1),
                labels = percent_format(a = 1))

Saving Rate (B8G)

France, Germany, Italy, Spain

All

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES"),
         na_item == "B8G",
         s_adj == "SCA",
         direct == "PAID",
         unit == "CP_MNAC",
         sector == "S14_S15") |>
  select(geo, Geo, time, values, sector) |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = values/B1GQ_NSA_CPMNAC) |>
  quarter_to_date() |>
  
  left_join(colors, by = c("Geo" = "country")) |>
  ggplot() + theme_minimal() + xlab("") + ylab("% of GDP") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 10), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 1),
                labels = percent_format(a = 1))

1999-

% of GDP

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item == "B8G",
         s_adj == "SCA",
         direct == "PAID",
         unit == "CP_MNAC",
         sector == "S14_S15") |>
  select(geo, Geo, time, values, sector) |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = values/B1GQ_NSA_CPMNAC) |>
  quarter_to_date() |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  filter(date >= as.Date("1999-01-01")) |>
  ggplot() + theme_minimal() + xlab("") + ylab("% of GDP") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  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, 1),
                labels = percent_format(a = 1))

% of Disposable income

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item %in% c("B8G", "B6G"),
         s_adj == "SCA",
         direct == "PAID",
         unit == "CP_MNAC",
         sector == "S14_S15") |>
  select(geo, Geo, time, values, sector, na_item) |>
  spread(na_item, values) |>
  mutate(values = B8G/B6G) |>
  quarter_to_date() |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  filter(date >= as.Date("1999-01-01")) |>
  ggplot() + theme_minimal() + xlab("") + ylab("B8G/B6G (% of Disposable income)") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  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))

2000-

% of GDP

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item == "B8G",
         s_adj == "SCA",
         direct == "PAID",
         unit == "CP_MNAC",
         sector == "S14_S15") |>
  select(geo, Geo, time, values, sector) |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = values/B1GQ_NSA_CPMNAC) |>
  quarter_to_date() |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  filter(date >= as.Date("2000-01-01")) |>
  ggplot() + theme_minimal() + xlab("") + ylab("% of GDP") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  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, 1),
                labels = percent_format(a = 1))

% of Disposable income

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item %in% c("B8G", "B6G"),
         s_adj == "SCA",
         direct == "PAID",
         unit == "CP_MNAC",
         sector == "S14_S15") |>
  select(geo, Geo, time, values, sector, na_item) |>
  spread(na_item, values) |>
  mutate(values = B8G/B6G) |>
  quarter_to_date() |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  filter(date >= as.Date("2000-01-01")) |>
  ggplot() + theme_minimal() + xlab("") + ylab("B8G/B6G (% of Disposable income)") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  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))

2015-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         na_item == "B8G",
         s_adj == "SCA",
         direct == "PAID",
         unit == "CP_MNAC",
         sector == "S14_S15") |>
  select(geo, Geo, time, values, sector) |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = values/B1GQ_NSA_CPMNAC) |>
  quarter_to_date() |>
  
  mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) |>
  left_join(colors, by = c("Geo" = "country")) |>
  filter(date >= as.Date("2015-01-01")) |>
  ggplot() + theme_minimal() + xlab("") + ylab("% of GDP") +
  geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 1),
                labels = percent_format(a = 1))

Operating surplus and mixed income, gross

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B2A3G",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S1") |>
  quarter_to_date() |>
  
  mutate(values = values/1000) |>
  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(1940, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  xlab("") + ylab("") +
  scale_y_log10(breaks = c(c(1, 2, 3, 5, 8, 10), 10*c(1, 2, 3, 5, 8, 10), 100*c(1, 2, 3, 5, 8, 10)),
                labels = dollar_format(suffix = " Bn€", prefix = "", accuracy = 1))

Tables

France

Code
nasq_10_nf_tr |>
  filter(geo == "FR",
         time == "2019Q1",
         s_adj == "NSA",
         direct == "PAID",
         unit == "CP_MNAC") |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = round(100*values/B1GQ_NSA_CPMNAC, 1) |> paste0("%")) |>
  
  select(na_item, Na_item, sector, values) |>
  spread(sector, values) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Germany

Code
nasq_10_nf_tr |>
  filter(geo == "DE",
         time == "2019Q1",
         s_adj == "NSA",
         direct == "PAID",
         unit == "CP_MNAC") |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = round(100*values/B1GQ_NSA_CPMNAC, 1) |> paste0("%")) |>
  
  select(na_item, Na_item, sector, values) |>
  spread(sector, values) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Italy

Code
nasq_10_nf_tr |>
  filter(geo == "IT",
         time == "2019Q1",
         s_adj == "NSA",
         direct == "PAID",
         unit == "CP_MNAC") |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = round(100*values/B1GQ_NSA_CPMNAC, 1) |> paste0("%")) |>
  
  select(na_item, Na_item, sector, values) |>
  spread(sector, values) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

B8G

France

Code
nasq_10_nf_tr |>
  filter(geo == "FR",
         time == "2019Q1",
         s_adj == "NSA",
         direct == "PAID",
         unit == "CP_MNAC") |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = round(100*values/B1GQ_NSA_CPMNAC, 1) |> paste0("%")) |>
  
  select(na_item, Na_item, sector, values) |>
  spread(sector, values) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

France

Code
nasq_10_nf_tr |>
  filter(geo == "FR",
         na_item == "B8G",
         s_adj == "SCA",
         #direct == "PAID",
         unit == "CP_MNAC") |>
  select(geo, Geo, time, values, sector, Sector, direct) |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = values/B1GQ_NSA_CPMNAC) |>
  quarter_to_date() |>
  
  ggplot() + theme_minimal() + xlab("") + ylab("") +
  geom_line(aes(x = date, y = values, color = Sector, linetype = direct)) +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.4, 0.7),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 1),
                labels = percent_format(a = 1))

Germany

Code
nasq_10_nf_tr |>
  filter(geo == "DE",
         na_item == "B8G",
         s_adj == "SCA",
         direct == "PAID",
         unit == "CP_MNAC") |>
  select(geo, Geo, time, values, sector, Sector) |>
  left_join(namq_10_gdp_B1GQ_NSA_CPMNAC, by = c("geo", "time")) |>
  mutate(values = values/B1GQ_NSA_CPMNAC) |>
  quarter_to_date() |>

  ggplot() + theme_minimal() + xlab("") + ylab("") +
  geom_line(aes(x = date, y = values, color = Sector)) +
  scale_color_manual(values = viridis(4)[1:3]) +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 1),
                labels = percent_format(a = 1))

France, Germany, Italy

B8G - Saving, Gross

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B8G",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S1") |>
  quarter_to_date() |>
  
  mutate(values = values/1000) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(c(1, 2, 3, 5, 8, 10),
                           10*c(1, 2, 3, 5, 8, 10),
                           100*c(1, 2, 3, 5, 8, 10)),
                labels = dollar_format(suffix = " Bn€", prefix = "", accuracy = 1))

B6G_R_HAB - GDI of households in real terms per capita

1999-

Value

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G_R_HAB",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC") |>
  quarter_to_date() |>
  filter(date >= as.Date("1999-01-01")) |>
  
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color, linetype = direct)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank())

Index = 1999

These
Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G_R_HAB",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC") |>
  quarter_to_date() |>
  filter(date >= as.Date("1999-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("GDI of households in real terms per capita") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1999, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 200, 2)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = round(values, 1), color = color))

Index = 1999

These
Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G_R_HAB",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC") |>
  quarter_to_date() |>
  filter(date >= as.Date("1999-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("GDI of households in real terms per capita") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1999, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 200, 2)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = round(values, 1), color = color))

All
Code
nasq_10_nf_tr |>
  filter(na_item == "B6G_R_HAB",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC") |>
  quarter_to_date() |>
  filter(date >= as.Date("1999-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("GDI of households in real terms per capita") +
  scale_x_date(breaks = as.Date(paste0(seq(1999, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 200, 2)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = paste0(Geo, ": ", round(values, 1)), color = color))

2017-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G_R_HAB",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC") |>
  quarter_to_date() |>
  filter(date >= as.Date("2017-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("B6G - Disposable income, Gross") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 200, 2))

Implicit price index in it

B6G/POP/B6G_R_HAB

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item %in% c("B6G_R_HAB", "B6G"),
         sector == "S14_S15",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC") |>
  select(time, geo, Geo, na_item, values) |>
  spread(na_item, values) |>
  left_join(POP |> select(geo, time, NSA), by = c("geo", "time")) |>
  transmute(time, geo, Geo, values = B6G/NSA/B6G_R_HAB) |>
  quarter_to_date() |>
  filter(date >= as.Date("1999-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("Implicit price index") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1999, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 200, 2)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = paste0(date, " : ", round(values, 1)), color = color))

B6G - Disposable income, Gross

All

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S1") |>
  quarter_to_date() |>
  
  mutate(values = values/1000) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(c(1, 2, 3, 5, 8, 10),
                           10*c(1, 2, 3, 5, 8, 10),
                           100*c(1, 2, 3, 5, 8, 10)),
                labels = dollar_format(suffix = " Bn€", prefix = "", accuracy = 1))

1996-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S1") |>
  quarter_to_date() |>
  filter(date >= as.Date("1996-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("B6G - Disposable income, Gross") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1995, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 1000, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = round(values, 1), color = color))

1999-

These

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S1") |>
  quarter_to_date() |>
  filter(date >= as.Date("1999-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("B6G - Disposable income, Gross") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1999, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 1000, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = paste0(Geo, ": ", round(values, 1)), color = color))

Population

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "NSA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S1") |>
  left_join(POP |> select(geo, time, NSA), by = c("geo", "time")) |>
  quarter_to_date() |>
  filter(date >= as.Date("1999-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = values/NSA) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("B6G - Disposable income, Gross/Population") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1999, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 1000, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = paste0(Geo, ": ", round(values, 1)), color = color))

All

Code
nasq_10_nf_tr |>
  filter(na_item == "B6G",
         geo != "RO",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S1") |>
  quarter_to_date() |>
  filter(date >= as.Date("1999-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("B6G - Disposable income, Gross") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1999, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 1000, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = paste0(Geo, ": ", round(values, 1)), color = color))

2001-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S1") |>
  left_join(POP |> select(geo, time, NSA), by = c("geo", "time")) |>
  quarter_to_date() |>
  filter(date >= as.Date("2001-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = values/NSA) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("B6G - Disposable income, Gross/Population") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1999, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 1000, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = paste0(Geo, ": ", round(values, 1)), color = color))

2017-

Nominal

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S1") |>
  quarter_to_date() |>
  filter(date >= as.Date("2017-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("B6G - Disposable income, Gross") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 200, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = paste0(Geo, ": ", round(values, 1)), color = color))

Nominal/population

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "EA20"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S1") |>
  left_join(POP |> select(geo, time, NSA), by = c("geo", "time")) |>
  quarter_to_date() |>
  filter(date >= as.Date("2017-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = values / NSA) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("B6G - Disposable income, Gross / Population") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 200, 5)) +
  geom_label_repel(data = . %>% filter(date == max(date)), aes(x = date, y = values, label = paste0(Geo, ": ", round(values, 1)), color = color))

Households

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "B6G",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S14_S15") |>
  quarter_to_date() |>
  
  mutate(values = values/1000) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(c(1, 2, 3, 5, 8, 10),
                           10*c(1, 2, 3, 5, 8, 10),
                           100*c(1, 2, 3, 5, 8, 10)),
                labels = dollar_format(suffix = " Bn€", prefix = "", accuracy = 1))

B2A3G - Operating surplus and mixed income, gross

All

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         na_item == "B2A3G",
         s_adj == "SCA",
         direct == "PAID",
         unit == "CP_MNAC",
         sector == "S1") |>
  quarter_to_date() |>
  
  mutate(values = values/1000) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(c(1, 2, 3, 5, 8, 10),
                           10*c(1, 2, 3, 5, 8, 10),
                           100*c(1, 2, 3, 5, 8, 10)),
                labels = dollar_format(suffix = " Bn€", prefix = "", accuracy = 1))

2000-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         na_item == "B2A3G",
         s_adj == "SCA",
         direct == "PAID",
         unit == "CP_MNAC",
         sector == "S1") |>
  quarter_to_date() |>
  
  mutate(values = values/1000) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  filter(date >= as.Date("2000-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = c(c(1, 2, 3, 5, 8, 10),
                           10*c(1, 2, 3, 5, 8, 10),
                           100*c(1, 2, 3, 5, 8, 10)),
                labels = dollar_format(suffix = " Bn€", prefix = "", accuracy = 1))

D4 - Property income

1999-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "D4",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S14_S15") |>
  quarter_to_date() |>
  filter(date >= as.Date("1999-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("Households, D4 - Property Income") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1999, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(20, 1000, 20))

2017-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "D4",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "SCA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S14_S15") |>
  quarter_to_date() |>
  filter(date >= as.Date("2017-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("Households, D4 - Property Income") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(20, 1000, 20))

D41

1999-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "D41",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "NSA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S14_S15") |>
  quarter_to_date() |>
  filter(date >= as.Date("1999-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("D41") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1999, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(20, 1000, 20))

2017-

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR", "DE", "IT", "ES", "NL"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item == "D4",
         # SCA: Seasonally and calendar adjusted data
         s_adj == "NSA",
         # PAID: Paid
         direct == "PAID",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S14_S15") |>
  quarter_to_date() |>
  filter(date >= as.Date("2017-01-01")) |>
  
  group_by(geo) |>
  arrange(date) |>
  mutate(values = 100*values/values[1]) |>
  left_join(colors, by = c( "Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  scale_color_identity() + theme_minimal()  + xlab("") + ylab("Households, D4 - Property Income") + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(20, 1000, 20))

France

2017-

Table

RECV

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR"),
         s_adj == "NSA",
         # PAID: Paid
         direct == "RECV",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S14_S15",
         time %in% c("2017Q1", "2023Q3")) %>%
  
  select_if(~ n_distinct(.) > 1) |>
  spread(time, values) %>%
  mutate(growth = 100*(.[[4]]/.[[3]]-1)) |>
  #arrange(-growth) %>%
  print_table_conditional()

Compensation of employees

Received

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item %in% c("D1"),
         # SCA: Seasonally and calendar adjusted data
         s_adj == "NSA",
         # PAID: Paid
         direct == "RECV",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S14_S15") |>
  quarter_to_date() |>
  
  filter(date >= as.Date("2017-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = Na_item)) +
  theme_minimal()  + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0000, 1000000, 10000))

Interest

Received

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item %in% c("D4", "D41", "D41G"),
         # SCA: Seasonally and calendar adjusted data
         s_adj == "NSA",
         # PAID: Paid
         direct == "RECV",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S14_S15") |>
  quarter_to_date() |>
  
  filter(date >= as.Date("2017-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = Na_item)) +
  theme_minimal()  + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0000, 100000, 5000))

Rents

Received

Code
nasq_10_nf_tr |>
  filter(geo %in% c("FR"),
         # B2A3G: Operating surplus and mixed income, gross
         na_item %in% c("D42", "D43", "D44", "D45", "D42_TO_D45"),
         # SCA: Seasonally and calendar adjusted data
         s_adj == "NSA",
         # PAID: Paid
         direct == "RECV",
         # CP_MNAC: Current prices, million units of national currency
         unit == "CP_MNAC",
         # S1: Total economy
         sector == "S14_S15") |>
  quarter_to_date() |>
  
  filter(date >= as.Date("2017-01-01")) |>
  arrange(date) |>
  ggplot() + geom_line(aes(x = date, y = values, color = Na_item)) +
  theme_minimal()  + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0000, 100000, 10000))