Nøgletal om beboede lokaliteter
aldersfordelingen, forsørgerbyrde, medianalder
aldersfordelingen, forsørgerbyrde, medianalder
04.06.2026
---
title: "Nøgletal om beboede lokaliteter"
subtitle: "aldersfordelingen, forsørgerbyrde, medianalder"
order: 2.4
tag:
- pop_size
toc: true
toc-title: Alder
icon: bi-geo-alt
lang: da
date: last-modified
date-format: "DD.MM.YYYY"
execute:
echo: false
warning: false
---
```{r setup}
library(tidyverse)
library(janitor)
library(statgl)
library(pxmake)
library(statgs)
library(htmltools)
library(highcharter)
LANG <- "da" # "da" | "en" | "kl"
if (!"statgs_map" %in% getNamespaceExports("statgs")) {
stop("statgs package with statgs_map() is not installed or not exported.", call. = FALSE)
}
txt <- statgs:::statgs_i18n(LANG)
use_bank <- "https://bank.stat.gl/api/v1/en/Greenland"
statbank_url <- "https://bank.stat.gl/pxweb/da/Greenland/Greenland__BE__BE01/BEXSTALL.px/"
fmt_num <- function(x, digits = 0) {
if (length(x) == 0 || is.null(x) || is.na(x)) return("")
format(round(as.numeric(x), digits), big.mark = ".", decimal.mark = ",", scientific = FALSE)
}
get1 <- function(row, nm) {
if (!nm %in% names(row)) NA else row[[nm]]
}
# -------------------------------------------------------------------# Population data by locality
# -------------------------------------------------------------------
popdata <- statgl_url("BEXSTD", api_url = use_bank, lang = "en") |>
statgl_fetch(
time = px_top(),
locality = px_all("*"),
.val_code = TRUE
) |>
clean_names() |>
mutate(lokkortnavn = stringr::str_sub(locality, 8, 10)) |>
filter(!lokkortnavn %in% c("ZZZ", "GRL"))
thisYear <- max(popdata$time)
x <- px("https://bank.stat.gl/Resources/PX/Databases/Greenland/BE/BE01/BEXSTALL.px")
demo_df <- statgs_read(
x,
district = "*",
content = "*",
time = top(1)
) |>
clean_names() |>
select(-time) |>
filter(nchar(district) == 10) |>
mutate(lokkortnavn = stringr::str_sub(district, 8, 10)) |>
filter(!lokkortnavn %in% c("ZZZ", "GRL")) |>
select(district, district_text, time_text, lokkortnavn, content, value) |>
distinct() |>
pivot_wider(names_from = content, values_from = value) |>
clean_names()
pop_candidates <- intersect(
c("pop", "population", "population_estimates", "population_estimate"),
names(demo_df)
)
if (length(pop_candidates) == 0) {
stop(
"Could not find a population column in demo_df. Available columns are: ",
paste(names(demo_df), collapse = ", "),
call. = FALSE
)
}
demo_df <- demo_df |>
mutate(pop = .data[[pop_candidates[[1]]]])
make_locality_tooltip <- function(txt) {
function(row) {
google_row <- if (!is.na(row$googlemap) && nzchar(row$googlemap)) {
paste0(
"<a href='", row$googlemap,
"' target='_blank' rel='noopener'>", txt$googtxt, "</a>"
)
} else {
""
}
tibble::tribble(
~sort, ~text, ~value,
1, paste0(txt$tbtxt1, htmlEscape(row$lokalitet_navn)), NA,
2, paste0(txt$tbtxt2, thisYear), fmt_num(row$population, 0),
3, "", NA,
4, txt$tbtxt12, fmt_num(row$areal_km2, 2),
5, txt$tbtxt14, fmt_num(row$pop_km2, 0),
6, "", NA,
7, txt$tbtxt3, NA,
8, txt$tbtxt4, paste0(fmt_num(get1(row, "b"), 1), "%"),
9, txt$tbtxt5, paste0(fmt_num(get1(row, "e"), 1), "%"),
10, txt$tbtxt6, paste0(fmt_num(get1(row, "g"), 1), "%"),
11, "", NA,
12, txt$tbtxt7, fmt_num(get1(row, "fb"), 1),
13, txt$tbtxt8, fmt_num(get1(row, "mean"), 1),
14, txt$tbtxt9, fmt_num(get1(row, "median"), 1),
15, txt$tbtxt10, paste0(fmt_num(get1(row, "kpct"), 1), "%"),
16, txt$tbtxt11, paste0(fmt_num(get1(row, "mpct"), 1), "%"),
17, "", NA,
18, paste0(
"<a href='", statbank_url, "' target='_blank' rel='noopener'>",
txt$sbtxt, "</a>"
), "",
19, "", NA_character_,
20, paste0(txt$visittxt, " ", row$lokalitet_navn), google_row
)
}
}
```
```{r search}
statgs:::statgs_locality_search_css()
statgs:::statgs_locality_search_controls(
placeholder = txt$search_ph,
button_text = txt$search_btn
)
statgs:::statgs_locality_datalist(
statgs:::statgs_locality_lookup()$lokalitet_navn
)
```
```{r locality-map}
statgs_map(
data = demo_df,
type = "locality",
tooltip_fun = make_locality_tooltip(txt)
)
```
```{r search-js}
statgs:::statgs_locality_search_js()
```