The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

psgc provides access to the Philippine Standard
Geographic Code (PSGC) — the official classification system for
geographic areas in the Philippines published by the Philippine
Statistics Authority (PSA). It bundles 12 releases (Q1 2023 –
Q1 2026) and exposes them through a small, consistent set of
functions.
# Install from CRAN
install.packages("psgc")
# Or install the development version from GitHub
# install.packages("pak")
pak::pak("yng-me/psgc")| Function | What it does |
|---|---|
list_releases() |
List all bundled PSA releases |
latest_release() |
Name of the most recent release |
get_psgc() |
Full PSGC table, with optional level filter and population |
psgc_info() |
Metadata for one or more PSGC codes |
get_population() |
Census population figures (long or wide) |
map_psgc() |
Trace codes forward across releases |
Every function defaults to the latest release. Pass a
release argument to work with older data.
library(psgc)
# All geographic areas in the latest release
ph <- get_psgc()
nrow(ph)
#> [1] 42046
head(ph)
#> psgc_code area_name geographic_level
#> 1 0100000000 Region I - Ilocos Region Reg
#> 2 0102800000 Ilocos Norte Prov
#> ...Plain English aliases are accepted — no need to memorise codes:
get_psgc(geographic_level = "Region")
get_psgc(geographic_level = "Province")
get_psgc(geographic_level = "Barangay")
# Cities and municipalities together
get_psgc(geographic_level = "city_mun")
# Multiple levels at once
get_psgc(geographic_level = c("City", "Municipality"))psgc_info("0100000000") # Region I
psgc_info(c("0100000000", "0102800000")) # batch lookup
# Short codes are accepted — trailing zeros are added automatically
psgc_info("01") # → "0100000000" (Region I)
psgc_info("01028") # → "0102800000" (Ilocos Norte)# Long format (default)
get_population(geographic_level = "Region", details = TRUE)
#> psgc_code area_name geographic_level year population
#> 1 0100000000 Region I - Ilocos Region Reg 2015 5026128
#> ...
# Wide format — one row per area, one column per census year
get_population(geographic_level = "Region", details = TRUE, wide = TRUE)
#> psgc_code area_name geographic_level population_2015 population_2020 population_2024
#> 1 0100000000 Region I - Ilocos Region Reg 5026128 5301139 5696141
#> ...regions <- get_psgc(
geographic_level = "Region",
include_population_data = TRUE
)
# population_data is a nested list-column — one data frame per row
regions$population_data[[1]]
#> population year
#> 1 5026128 2015
#> 2 5301139 2020
#> 3 5696141 2024# What is the current code for this 2023-era code?
map_psgc("0100000000")
# Map to a specific target release
map_psgc("0100000000", to = "Q4_2023")mapping_type tells you what changed:
"direct" (unchanged), "renumbered",
"split", "merged", or "abolished"
(new code will be NA).
| Code | Aliases accepted | Description |
|---|---|---|
Reg |
Region, region, REG, … |
Region |
Prov |
Province, province, PROV,
… |
Province |
City |
City, city, CITY |
City |
Mun |
Municipality, municipal, MUN,
… |
Municipality |
SubMun |
Sub-Municipality, SubMun,
sub_mun, … |
Sub-municipality |
Bgy |
Barangay, Brgy, barangay,
BGY, … |
Barangay |
| (special) | city_mun, City-Municipality, … |
Cities and Municipalities |
list_releases()
#> [1] "Q1_2023" "Q4_2023" "April_2024" "Q2_2024" "Q3_2024"
#> [6] "Q4_2024" "Q1_2025" "Q2_2025" "July_2025" "Q3_2025"
#> [11] "Q4_2025" "Q1_2026"MIT © Bhas Abdulsamad
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.