Extract mountain observations from DASCO data

RAVeM

Author

Adrian García-Rodríguez, David Umhauer & Marcelo Araya-Salas

Published

October 21, 2025

Purpose

  • Show case how to extract occurrence data (from the DASCO data set) from in mountains

First we load the required packages:

Code
# install packages if not installed
if (!requireNamespace("sketchy", quietly = TRUE)) {
  install.packages("sketchy")
}

packages <- c("plyr", "dplyr", "tidyverse", "sf", "terra", "data.table")

# install/ load packages
sketchy::load_packages(packages = packages)
Warning: package 'tibble' was built under R version 4.4.3
Warning: package 'sf' was built under R version 4.4.3
Warning: package 'terra' was built under R version 4.4.3
Warning: package 'data.table' was built under R version 4.4.3

1 Download/read data

We can download the amphibian data we extracted from the DASCO v2.5 data (after adding taxonomic information). We also download the geographic data of world mountains. The following code downloads these files to a local folder defined by the user:

Code
# download observations 
download.file("https://figshare.com/ndownloader/files/58775401",
              destfile = file.path(local_folder, "DASCO_v2.5_Amphibians.csv"),
              mode = "wb")

# download mountain polygons
download.file("https://figshare.com/ndownloader/files/58776649",
              destfile = file.path(local_folder, "GMBA_Inventory_v2.0_standard_basic.zip"),
              mode = "wb")

The files can also be downloaded manually from these links:

Now unzip the mountain polygons file into the same local folder.

1.1 Load data

The following code loads the mountain polygons (selecting specific columns) and the DASCO v2.5 amphibian records:

Code
local_folder <- "PATH TO YOUR LOCAL FOLDER" # e.g. "C:/Users/RAVe-M_2025/"

# Load amphibians DASCO v2.5
dasco_amphibians <- fread(file.path(local_folder, "DASCO_v2.5_Amphibians.csv"))

# Load polygons delimitating mountains (Standard basic layer from Snethlage et al. 2022)
mountain_polygons <- vect(file.path(local_folder , "GMBA_Inventory_v2.0_standard_basic.shp"))

# select specific columns
mountain_polygons <- mountain_polygons[, c(
    "MapName",
    "GMBA_V2_ID",
    "MapUnit",
    "Area",
    "Perimeter",
    "Elev_Low",
    "Elev_High",
    "Level_01",
    "Level_02",
    "Level_03",
    "Level_04",
    "Level_05",
    "Level_06",
    "Level_07",
    "Level_08",
    "Level_09",
    "Level_10",
    "Countries",
    "Feature"
)]

2 Extracting records in mountains

2.1 Join mountain polygons and occurrence data

This section performs a spatial join to extract polygon data for each point, identifying which occurrence records fall within mountain boundaries.

Code
# Convert points and mountain polygons to sf objects
dasco_sf <- st_as_sf(
    x = dasco_amphibians,
    coords = c("Longitude", "Latitude"),
    crs = 4326
)

mountains_sf <- st_as_sf(mountain_polygons)
mountains_sf <- st_make_valid(mountains_sf) # make sure geometries are valid
mountains_sf <- st_simplify(mountains_sf, dTolerance = 0.001) # Simplify complex geometric relationships

# Perform a spatial join to extract polygon data for each point
# Note: Use st_join() to join points and polygons based on their spatial relationship
dasco_mountains <- st_join(dasco_sf, mountains_sf, join = st_intersects)
head(dasco_mountains)
taxon location Realm Database speciesKey kingdom phylum class order family MapName GMBA_V2_ID MapUnit Area Perimeter Elev_Low Elev_High Level_01 Level_02 Level_03 Level_04 Level_05 Level_06 Level_07 Level_08 Level_09 Level_10 Countries Feature geometry
Afrixalus fulvovittatus Ghana terrestrial GBIF 2426552 Animalia Chordata Amphibia Anura Hyperoliidae NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA POINT (-0.217 5.55)
Afrixalus fulvovittatus Ghana terrestrial GBIF 2426552 Animalia Chordata Amphibia Anura Hyperoliidae NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA POINT (-2.489 10.07917)
Afrixalus fulvovittatus Ghana terrestrial GBIF 2426552 Animalia Chordata Amphibia Anura Hyperoliidae NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA POINT (-2.509667 10.0585)
Afrixalus fulvovittatus Ghana terrestrial GBIF 2426552 Animalia Chordata Amphibia Anura Hyperoliidae NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA POINT (-1.006333 9.491167)
Afrixalus fulvovittatus Ghana terrestrial GBIF 2426552 Animalia Chordata Amphibia Anura Hyperoliidae NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA POINT (-0.984333 9.397833)
Afrixalus fulvovittatus Ghana terrestrial GBIF 2426552 Animalia Chordata Amphibia Anura Hyperoliidae NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA POINT (-2.6455 5.26405)
Code
# Remove records not overlapping with mountains
amphibians_in_mountains <- dasco_mountains %>%
    drop_na(MapName)

We can also save the extracted records in mountains in a data frame format:

Code
# Convert geometry to separate lon/lat columns
amphibians_in_mountains_df <- amphibians_in_mountains %>%
  mutate(
    lon = st_coordinates(.)[,1],
    lat = st_coordinates(.)[,2]
  ) %>%
  st_drop_geometry()  # Remove geometry column

3 Extracting mountains with records

Here we subset the mountain polygons to keep only those mountains with amphibian records:

Code
# Subset the mountain polygon to keep only the mountains with records
mountains_with_records <- unique(amphibians_in_mountains$MapName)

mountains_with_records_shp <- 
    mountain_polygons[mountain_polygons$MapName %in% mountains_with_records]

4 Plot data

We can visualize the results by plotting the mountain polygons with records and overlaying the amphibian occurrence points. Let’s first create a world map higlighting the selected mountain ranges:

Code
# Plot world map
maps::map("world", 
    col = "#A0DFB980", 
    fill = TRUE, 
    border = "white",
    xlim = c(-180, 180), 
    ylim = c(-60, 80))

# Add mountain polygons on top
plot(mountains_with_records_shp, 
     add = TRUE, 
     col = "#366A9F80", 
     border = "#366A9F80", 
     lwd = 1)

Now we can add the amphibian occurrence points on top of the mountain polygons:

Code
points(
    amphibians_in_mountains$geometry,
    col = adjustcolor("tomato", alpha.f = 0.1),
    pch = 20,
    cex = 0.1
)

5 Save results

Finally we can save the results as shapefiles and a CSV file for further analysis:

Code
# Save as .shp
st_write(
    amphibians_in_mountains,
    file.path(local_folder, "amphibians_in_mountains.shp"),
    append = FALSE
)

# Saving in the Shiny folder as this will be used for visualization
writeVector(
    mountains_with_records_shp,
    file.path(local_folder, "/Shp_Mt_W_records.shp"),
    filetype =
        "ESRI Shapefile"
)

# Write to CSV
data.table::fwrite(
    amphibians_in_mountains_df,
    file.path(local_folder, "amphibians_in_mountains.csv")
)

Session information

Click to see
Warning in system2("quarto", "-V", stdout = TRUE, env = paste0("TMPDIR=", :
running command '"quarto"
TMPDIR=C:/Users/garciaa/AppData/Local/Temp/Rtmpmg1JF0/file502c6b6a17ef -V' had
status 1
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.4.2 (2024-10-31 ucrt)
 os       Windows 11 x64 (build 22631)
 system   x86_64, mingw32
 ui       RTerm
 language (EN)
 collate  English_Austria.utf8
 ctype    English_Austria.utf8
 tz       Europe/Vienna
 date     2025-10-21
 pandoc   3.2 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)
 quarto   NA @ C:\\PROGRA~1\\RStudio\\RESOUR~1\\app\\bin\\quarto\\bin\\quarto.exe

─ Packages ───────────────────────────────────────────────────────────────────
 package       * version date (UTC) lib source
 cachem          1.1.0   2024-05-16 [2] CRAN (R 4.4.2)
 class           7.3-22  2023-05-03 [2] CRAN (R 4.4.2)
 classInt        0.4-11  2025-01-08 [2] CRAN (R 4.4.2)
 cli             3.6.3   2024-06-21 [1] CRAN (R 4.4.2)
 codetools       0.2-20  2024-03-31 [2] CRAN (R 4.4.2)
 colorspace      2.1-1   2024-07-26 [2] CRAN (R 4.4.2)
 crayon          1.5.3   2024-06-20 [2] CRAN (R 4.4.2)
 data.table    * 1.17.8  2025-07-10 [1] CRAN (R 4.4.3)
 DBI             1.2.3   2024-06-02 [2] CRAN (R 4.4.2)
 devtools        2.4.5   2022-10-11 [1] CRAN (R 4.4.2)
 digest          0.6.37  2024-08-19 [2] CRAN (R 4.4.2)
 dplyr         * 1.1.4   2023-11-17 [2] CRAN (R 4.4.2)
 e1071           1.7-16  2024-09-16 [2] CRAN (R 4.4.2)
 ellipsis        0.3.2   2021-04-29 [1] CRAN (R 4.4.2)
 evaluate        1.0.3   2025-01-10 [2] CRAN (R 4.4.2)
 fastmap         1.2.0   2024-05-15 [2] CRAN (R 4.4.2)
 forcats       * 1.0.0   2023-01-29 [2] CRAN (R 4.4.2)
 fs              1.6.5   2024-10-30 [2] CRAN (R 4.4.2)
 generics        0.1.3   2022-07-05 [2] CRAN (R 4.4.2)
 ggplot2       * 3.5.1   2024-04-23 [2] CRAN (R 4.4.2)
 glue            1.8.0   2024-09-30 [2] CRAN (R 4.4.2)
 gtable          0.3.6   2024-10-25 [2] CRAN (R 4.4.2)
 hms             1.1.3   2023-03-21 [2] CRAN (R 4.4.2)
 htmltools       0.5.8.1 2024-04-04 [1] CRAN (R 4.4.3)
 htmlwidgets     1.6.4   2023-12-06 [1] CRAN (R 4.4.3)
 httpuv          1.6.15  2024-03-26 [1] CRAN (R 4.4.2)
 jsonlite        2.0.0   2025-03-27 [1] CRAN (R 4.4.3)
 KernSmooth      2.23-24 2024-05-17 [2] CRAN (R 4.4.2)
 knitr           1.49    2024-11-08 [2] CRAN (R 4.4.2)
 later           1.4.1   2024-11-27 [1] CRAN (R 4.4.2)
 lifecycle       1.0.4   2023-11-07 [2] CRAN (R 4.4.2)
 lubridate     * 1.9.4   2024-12-08 [2] CRAN (R 4.4.2)
 magrittr        2.0.3   2022-03-30 [2] CRAN (R 4.4.2)
 maps            3.4.2.1 2024-11-10 [1] CRAN (R 4.4.2)
 memoise         2.0.1   2021-11-26 [2] CRAN (R 4.4.2)
 mime            0.13    2025-03-17 [1] CRAN (R 4.4.3)
 miniUI          0.1.1.1 2018-05-18 [1] CRAN (R 4.4.2)
 munsell         0.5.1   2024-04-01 [2] CRAN (R 4.4.2)
 packrat         0.9.3   2025-06-16 [1] CRAN (R 4.4.2)
 pillar          1.11.0  2025-07-04 [1] CRAN (R 4.4.3)
 pkgbuild        1.4.6   2025-01-16 [1] CRAN (R 4.4.2)
 pkgconfig       2.0.3   2019-09-22 [2] CRAN (R 4.4.2)
 pkgload         1.4.0   2024-06-28 [1] CRAN (R 4.4.2)
 plyr          * 1.8.9   2023-10-02 [2] CRAN (R 4.4.2)
 profvis         0.4.0   2024-09-20 [1] CRAN (R 4.4.2)
 promises        1.3.2   2024-11-28 [1] CRAN (R 4.4.2)
 proxy           0.4-27  2022-06-09 [2] CRAN (R 4.4.2)
 purrr         * 1.0.2   2023-08-10 [2] CRAN (R 4.4.2)
 R6              2.6.1   2025-02-15 [1] CRAN (R 4.4.2)
 Rcpp            1.1.0   2025-07-02 [1] CRAN (R 4.4.3)
 readr         * 2.1.5   2024-01-10 [2] CRAN (R 4.4.2)
 remotes         2.5.0   2024-03-17 [2] CRAN (R 4.4.2)
 rlang           1.1.5   2025-01-17 [1] CRAN (R 4.4.3)
 rmarkdown       2.29    2024-11-04 [2] CRAN (R 4.4.2)
 rstudioapi      0.17.1  2024-10-22 [2] CRAN (R 4.4.2)
 s2              1.1.7   2024-07-17 [2] CRAN (R 4.4.2)
 scales          1.3.0   2023-11-28 [2] CRAN (R 4.4.2)
 sessioninfo     1.2.3   2025-02-05 [1] CRAN (R 4.4.2)
 sf            * 1.0-21  2025-05-15 [1] CRAN (R 4.4.3)
 shiny           1.11.1  2025-07-03 [1] CRAN (R 4.4.3)
 sketchy         1.0.5   2025-01-16 [1] CRAN (R 4.4.3)
 stringi         1.8.4   2024-05-06 [2] CRAN (R 4.4.0)
 stringr       * 1.5.1   2023-11-14 [2] CRAN (R 4.4.2)
 terra         * 1.8-29  2025-02-26 [1] CRAN (R 4.4.3)
 tibble        * 3.3.0   2025-06-08 [1] CRAN (R 4.4.3)
 tidyr         * 1.3.1   2024-01-24 [2] CRAN (R 4.4.2)
 tidyselect      1.2.1   2024-03-11 [2] CRAN (R 4.4.2)
 tidyverse     * 2.0.0   2023-02-22 [2] CRAN (R 4.4.2)
 timechange      0.3.0   2024-01-18 [2] CRAN (R 4.4.2)
 tzdb            0.5.0   2025-03-15 [1] CRAN (R 4.4.3)
 units           0.8-5   2023-11-28 [2] CRAN (R 4.4.2)
 urlchecker      1.0.1   2021-11-30 [1] CRAN (R 4.4.2)
 usethis         3.1.0   2024-11-26 [1] CRAN (R 4.4.2)
 vctrs           0.6.5   2023-12-01 [2] CRAN (R 4.4.2)
 withr           3.0.2   2024-10-28 [2] CRAN (R 4.4.2)
 wk              0.9.4   2024-10-11 [2] CRAN (R 4.4.2)
 xaringanExtra   0.8.0   2024-05-19 [1] CRAN (R 4.4.3)
 xfun            0.50    2025-01-07 [2] CRAN (R 4.4.2)
 xtable          1.8-4   2019-04-21 [1] CRAN (R 4.4.2)
 yaml            2.3.10  2024-07-26 [2] CRAN (R 4.4.2)

 [1] C:/Users/garciaa/AppData/Local/R/win-library/4.4
 [2] C:/Program Files/R/R-4.4.2/library
 * ── Packages attached to the search path.

──────────────────────────────────────────────────────────────────────────────