Income of households by NUTS 2 regions - nama_10r_2hhinc

Data - Eurostat

Info

Last observation: Annual: 2024 (N = 3,082)

First observation: Annual: 2000 (N = 10,714)

Last data update: 23 jul 2026, 22:08. Last compile: 24 jul 2026, 02:52

Structure

Disposable Income per Inhabitant

France, Germany, Spain, Italy, Portugal

Code
nama_10r_2hhinc %>%
  filter(geo %in% c("FR", "DE", "ES", "IT", "PT"),
         direct == "BAL",
         na_item == "B6N",
         unit == "EUR_HAB") %>%
  year_to_date %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal() + scale_color_identity() + add_5flags +
  scale_x_date(breaks = as.Date(paste0(seq(2000, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Disposable income per inhabitant (€)") +
  scale_y_continuous(labels = scales::comma_format())

Table

Code
nama_10r_2hhinc %>%
  filter(time == "2015", 
         nchar(geo) == 4,
         direct == "BAL",
         na_item == "B6N") %>%
  select(geo, Geo, value_added = values) %>%
  full_join(nama_10r_3empers %>%
              filter(time == "2015",
                     nchar(geo) == 4,
                     wstatus == "EMP",
                     nace_r2 == "TOTAL") %>%
              select(geo, employment = values), by = "geo") %>%
  mutate(emp_person = round(1000*value_added / employment)) %>%
  
  select(geo, Geo, emp_person) %>%
  na.omit %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Maps

Code
nama_10r_2hhinc %>%
  filter(time == "2015", 
         nchar(geo) == 4,
         direct == "BAL",
         na_item == "B6N") %>%
  select(geo, Geo, value_added = values) %>%
  full_join(nama_10r_3empers %>%
              filter(time == "2015",
                     nchar(geo) == 4,
                     wstatus == "EMP",
                     nace_r2 == "TOTAL") %>%
              select(geo, employment = values), 
            by = "geo") %>%
  mutate(value = round(1000*value_added / employment)) %>%
  
  select(geo, Geo, value) %>%
  right_join(europe_NUTS2, by = "geo") %>%
  filter(long >= -15, lat >= 33, value <= 80000) %>%
  ggplot(., aes(x = long, y = lat, group = group, fill = value/1000)) +
  geom_polygon() + coord_map() +
  scale_fill_viridis_c(na.value = "white",
                       labels = scales::dollar_format(accuracy = 1, prefix = "", suffix = " k€"),
                       breaks = c(seq(0, 80, 10), 100, 200),
                       values = c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 1)) +
  theme_void() + theme(legend.position = c(0.25, 0.85)) + 
  labs(fill = "Compensation / Person")