Structure of labour cost by NACE Rev. 2 activity - % of total cost - lc_nstruc_r2

Data - Eurostat

Info

Last observation: Annual: 2020 (N = 565,308)

First observation: Annual: 2008 (N = 604,673)

Last data update: 11 aoû 2026, 20:26. Last compile: 12 aoû 2026, 00:51

Structure

Spain, Netherlands, Portugal, Hungary, Romania

Wages and Salaries (D1, % of Total Labour Cost)

Code
lc_nstruc_r2 |>
  filter(geo %in% c("ES", "NL", "PT", "HU", "RO"),
         sizeclas == "TOTAL",
         nace_r2 == "B-S_X_O",
         lcstruct == "D1") |>
  year_to_date() |>
  left_join(colors, by = c("Geo" = "country")) |>
  mutate(values = values/100) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal() + scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(2008, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Compensation of employees (% of total labour cost)") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1))

Non-Wage Cost Components

EU27, Whole Economy

Code
lc_nstruc_r2 |>
  filter(geo == "EU27_2020",
         sizeclas == "TOTAL",
         nace_r2 == "B-S_X_O",
         lcstruct %in% c("D2", "D3", "D4", "D5")) |>
  year_to_date() |>
  mutate(values = values/100) |>
  ggplot() + geom_line(aes(x = date, y = values, color = Lcstruct)) +
  theme_minimal() +
  theme(legend.position = c(0.75, 0.8),
        legend.title = element_blank()) +
  scale_x_date(breaks = as.Date(paste0(seq(2008, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("% of total labour cost") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 0.1))

Latest Survey Year by Cost Component

Code
latest_y <- lc_nstruc_r2 |>
  filter(sizeclas == "TOTAL", nace_r2 == "B-S_X_O", lcstruct == "D1", !is.na(values)) |>
  summarise(m = max(time)) |>
  pull(m)

lc_nstruc_r2 |>
  filter(geo %in% c("EU27_2020", "ES", "NL", "PT", "HU", "RO"),
         sizeclas == "TOTAL",
         nace_r2 == "B-S_X_O",
         lcstruct %in% c("D1", "D2", "D3", "D4", "D5"),
         time == latest_y) |>
  select(Geo, lcstruct, values) |>
  spread(lcstruct, values) |>
  print_table_conditional()
Geo D1 D2 D3 D4 D5
European Union - 27 countries (from 2020) 100.47 0.58 0.94 0.09 2.08
Hungary 96.84 0.96 2.14 0.26 0.20
Netherlands 100.76 1.08 2.07 0.17 4.07
Portugal 100.90 0.14 0.33 NA 1.37
Romania 100.38 0.08 0.39 0.58 1.44
Spain 99.21 0.18 0.69 NA 0.08