Last observation: A: 2023 (N = 3)
First observation: A: 1960 (N = 883)
Last data update: 02 aoû 2026, 09:12. Last compile: 18 aoû 2026, 03:11
Data - OECD
Last observation: A: 2023 (N = 3)
First observation: A: 1960 (N = 883)
Last data update: 02 aoû 2026, 09:12. Last compile: 18 aoû 2026, 03:11



SNA_TABLE8A |>
group_by(obsTime) |>
summarise(Nobs = n()) |>
arrange(desc(obsTime)) |>
print_table_conditional()SNA_TABLE8A |>
filter(MEASURE == "C",
LOCATION %in% c("USA", "FRA", "DEU"),
TRANSACT %in% c("P51A", "B1_GE"),
obsTime == "2016") |>
left_join(SNA_TABLE8A_var$ACTIVITY, by = "ACTIVITY") |>
select(LOCATION, TRANSACT, ACTIVITY, Activity, obsValue) |>
arrange(TRANSACT) |>
mutate(obsValue = obsValue/obsValue[TRANSACT == "B1_GE"]) |>
filter(TRANSACT != "B1_GE") |>
spread(LOCATION, obsValue) |>
select(-1) %>%
mutate_at(vars(3:5), funs(ifelse(!is.na(.), paste0(round(100*., digits = 1), "%"), ""))) |>
print_table_conditional()SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
LOCATION %in% c("USA", "FRA", "DEU")) |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(SNA_TABLE8A_var$LOCATION, by = "LOCATION") |>
rename(`Type of Fixed Asset` = Transact) |>
filter(obsTime == 2016) |>
select(TRANSACT, `Type of Fixed Asset`, Location, obsValue) |>
arrange(TRANSACT) |>
mutate(Location = gsub(" ", "-", str_to_lower(gsub(" ", "-", Location))),
Location = paste0('<img src="../../icon/flag/vsmall/', Location, '.png" alt="Flag">')) |>
group_by(Location) |>
spread(Location, obsValue) %>%
mutate_at(vars(3:5), funs(ifelse(!is.na(.), paste0(round(100*. / .[1], digits = 1), "%"), ""))) %>%
{if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}SNA_TABLE8A |>
filter(TRANSACT %in% c("B1_GE", "P51N1113A", "P51A",
"P51N112A", "P51N1111A", "P51N1112A"),
ACTIVITY == "VTOT",
MEASURE == "C") |>
left_join(SNA_TABLE8A_var$LOCATION, by = "LOCATION") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
mutate(Transact = case_when(Transact == "Gross fixed capital formation" ~ "GFCF",
Transact == "Intellectual property product" ~ "IPP",
Transact == "Machinery and equipment and weapon system" ~ "Machinery, Equip",
Transact == "Other buildings and structures" ~ "Other Buildings",
T ~ Transact)) |>
filter(obsTime == 2016) |>
select(Location, Transact, obsValue) |>
spread(Transact, obsValue) |>
filter(!is.na(`IPP`)) |>
rename(GDP = `Gross domestic product (expenditure approach)`) %>%
mutate_at(vars(-GDP, -Location), funs(paste0(round(100*./ GDP, digits = 1), "%"))) %>%
mutate_all(funs(gsub("NA%", "", .))) |>
select(-GDP) |>
select(Location, GFCF, everything()) |>
arrange(Location) |>
filter(`GFCF` != "") |>
mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Location))),
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 .}SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N1111A", "P51N1112A", "P51N1113A", "P51N112A"),
LOCATION == "DEU") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1),
limits = c(0.02, 0.1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.7, 0.9),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N11131A", "P51N1113IA", "P51N1113OA"),
LOCATION == "DEU") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.6, 0.6),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P52A", "P52_P53A", "P53A"),
LOCATION == "DEU") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(-1, 1300, .5),
labels = scales::percent_format(accuracy = .1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.4, 0.2),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N1111A", "P51N1112A", "P51N1113A", "P51N112A"),
LOCATION == "FRA") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1),
limits = c(0.02, 0.1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.7, 0.9),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N11131A", "P51N1113IA", "P51N1113OA"),
LOCATION == "FRA") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.6, 0.6),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P52A", "P52_P53A", "P53A"),
LOCATION == "FRA") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(-1, 1300, .5),
labels = scales::percent_format(accuracy = .1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.4, 0.2),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N1111A", "P51N1112A", "P51N1113A", "P51N112A"),
LOCATION == "ESP") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.78, 0.9),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N11131A", "P51N1113IA", "P51N1113OA"),
LOCATION == "ESP") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.6, 0.6),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P52A", "P52_P53A", "P53A"),
LOCATION == "ESP") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(-1, 1300, .1),
labels = scales::percent_format(accuracy = .1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.4, 0.2),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N1111A", "P51N1112A", "P51N1113A", "P51N112A"),
LOCATION == "USA") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.78, 0.9),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N11131A", "P51N1113IA", "P51N1113OA"),
LOCATION == "USA") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.6, 0.6),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N1111A", "P51N1112A", "P51N1113A", "P51N112A"),
LOCATION == "GBR") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.78, 0.9),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N11131A", "P51N1113IA", "P51N1113OA"),
LOCATION == "GBR") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.6, 0.6),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N1111A", "P51N1112A", "P51N1113A", "P51N112A"),
LOCATION == "GRC") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.78, 0.9),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N11131A", "P51N1113IA", "P51N1113OA"),
LOCATION == "GRC") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.6, 0.6),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N1111A", "P51N1112A", "P51N1113A", "P51N112A"),
LOCATION == "SWE") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.78, 0.9),
legend.title = element_blank())
SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
TRANSACT %in% c("P51N11131A", "P51N1113IA", "P51N1113OA"),
LOCATION == "SWE") |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(B1_GE_C, by = c("LOCATION", "obsTime")) |>
year_to_date() |>
ggplot() + theme_minimal() + ylab("% of GDP") + xlab("") +
geom_line(aes(x = date, y = obsValue / B1_GE_C, color = Transact)) +
scale_y_continuous(breaks = 0.01*seq(0, 1300, 1),
labels = scales::percent_format(accuracy = 1)) +
scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
theme(legend.position = c(0.6, 0.6),
legend.title = element_blank())

SNA_TABLE8A |>
filter(ACTIVITY == "VTOT",
MEASURE == "C",
LOCATION %in% c("USA", "FRA", "DEU")) |>
left_join(SNA_TABLE8A_var$TRANSACT, by = "TRANSACT") |>
left_join(SNA_TABLE8A_var$LOCATION, by = "LOCATION") |>
rename(`Type of Fixed Asset` = Transact) |>
rename(Country = Location) |>
filter(obsTime == 2016) |>
select(TRANSACT, `Type of Fixed Asset`, Country, obsValue) |>
arrange(TRANSACT) |>
group_by(Country) |>
mutate(obsValue = ifelse(!is.na(obsValue), paste0(round(100*obsValue / obsValue[1], digits = 1), "%"), "")) |>
spread(Country, obsValue) %>%
mutate_at(vars(-1, -2), funs(ifelse(is.na(.), "", .))) %>%
{if (is_html_output() | is_latex_output()) print_table(.) else .}| TRANSACT | Type of Fixed Asset | France | Germany | United States |
|---|---|---|---|---|
| B1_GE | Gross domestic product (expenditure approach) | 100% | 100% | 100% |
| P51A | Gross fixed capital formation | 21.8% | 20.3% | 20% |
| P51N1111A | Dwellings | 6% | 6% | 3.7% |
| P51N1112A | Other buildings and structures | 5.5% | 3.8% | 4.4% |
| P51N11131A | Transport equipment | 1.6% | 1.9% | 1.6% |
| P51N111321A | Computer hardware | 0.2% | 0.4% | 0.6% |
| P51N111322A | Telecommunications equipment | 0.2% | 0.3% | 0.6% |
| P51N1113A | Machinery and equipment and weapon system | 5% | 6.8% | 6.5% |
| P51N1113IA | ICT equipment, SNA08 | 0.5% | 0.7% | 1.2% |
| P51N1113OA | Other machinery and equipment and weapon system, SNA08 | 2.9% | 4.2% | 3.7% |
| P51N1114A | Cultivated biological resources | 0.1% | 0% | |
| P51N111XA | Total construction | 11.5% | 9.8% | 8.1% |
| P51N11221A | Computer software | 2% | ||
| P51N1122A | Computer software and databases | 2.9% | 0.7% | 2% |
| P51N1123A | Entertainment, literary and artistic originals | 0.4% | ||
| P51N1124A | Research and development | 2.2% | 2.7% | 2.9% |
| P51N112A | Intellectual property product | 5.3% | 3.6% | 5.4% |
| P52_P53A | Changes in inventories and acquisition less disposals of valuables | 0.8% | -0.3% | |
| P52A | Changes in inventories | 0.8% | -0.4% | |
| P53A | Acquisition less disposals of valuables | 0% | 0.1% | |
| P5A | Gross capital formation | 22.6% | 20% |