Extract mountain observations from DASCO data

RAVeM

Author

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

Published

October 15, 2025

Purpose

  • Extract observations from the DASCO data set that occur in mountains on the example amphibian data

Load package

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)

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
# 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 Spatial Join with Mountain Polygons

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 mountain 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("green4", 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
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.5.0 (2025-04-11)
 os       Ubuntu 22.04.5 LTS
 system   x86_64, linux-gnu
 ui       X11
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       America/Costa_Rica
 date     2025-10-15
 pandoc   3.2 @ /usr/lib/rstudio/resources/app/bin/quarto/bin/tools/x86_64/ (via rmarkdown)
 quarto   1.7.31 @ /usr/local/bin/quarto

─ Packages ───────────────────────────────────────────────────────────────────
 package       * version date (UTC) lib source
 cachem          1.1.0   2024-05-16 [1] CRAN (R 4.5.0)
 class           7.3-23  2025-01-01 [4] CRAN (R 4.4.2)
 classInt        0.4-11  2025-01-08 [1] CRAN (R 4.5.0)
 cli             3.6.5   2025-04-23 [1] CRAN (R 4.5.0)
 codetools       0.2-20  2024-03-31 [4] CRAN (R 4.5.0)
 crayon          1.5.3   2024-06-20 [1] CRAN (R 4.5.0)
 data.table    * 1.17.8  2025-07-10 [1] CRAN (R 4.5.0)
 DBI             1.2.3   2024-06-02 [1] CRAN (R 4.5.0)
 devtools        2.4.5   2022-10-11 [1] CRAN (R 4.5.0)
 digest          0.6.37  2024-08-19 [1] CRAN (R 4.5.0)
 dplyr         * 1.1.4   2023-11-17 [1] CRAN (R 4.5.0)
 e1071           1.7-16  2024-09-16 [1] CRAN (R 4.5.0)
 ellipsis        0.3.2   2021-04-29 [3] CRAN (R 4.1.1)
 evaluate        1.0.5   2025-08-27 [1] CRAN (R 4.5.0)
 farver          2.1.2   2024-05-13 [1] CRAN (R 4.5.0)
 fastmap         1.2.0   2024-05-15 [1] CRAN (R 4.5.0)
 forcats       * 1.0.0   2023-01-29 [1] CRAN (R 4.5.0)
 fs              1.6.6   2025-04-12 [1] CRAN (R 4.5.0)
 generics        0.1.4   2025-05-09 [1] CRAN (R 4.5.0)
 ggplot2       * 4.0.0   2025-09-11 [1] CRAN (R 4.5.0)
 glue            1.8.0   2024-09-30 [1] CRAN (R 4.5.0)
 gtable          0.3.6   2024-10-25 [1] CRAN (R 4.5.0)
 hms             1.1.3   2023-03-21 [3] CRAN (R 4.5.0)
 htmltools       0.5.8.1 2024-04-04 [1] CRAN (R 4.5.0)
 htmlwidgets     1.6.4   2023-12-06 [1] RSPM (R 4.5.0)
 httpuv          1.6.16  2025-04-16 [1] RSPM (R 4.5.0)
 jsonlite        2.0.0   2025-03-27 [1] CRAN (R 4.5.0)
 KernSmooth      2.23-26 2025-01-01 [4] CRAN (R 4.4.2)
 knitr           1.50    2025-03-16 [1] CRAN (R 4.5.0)
 later           1.4.2   2025-04-08 [1] RSPM (R 4.5.0)
 lifecycle       1.0.4   2023-11-07 [1] CRAN (R 4.5.0)
 lubridate     * 1.9.4   2024-12-08 [3] CRAN (R 4.5.0)
 magrittr        2.0.4   2025-09-12 [1] CRAN (R 4.5.0)
 maps            3.4.2.1 2024-11-10 [3] CRAN (R 4.5.0)
 memoise         2.0.1   2021-11-26 [3] CRAN (R 4.1.2)
 mime            0.13    2025-03-17 [1] CRAN (R 4.5.0)
 miniUI          0.1.2   2025-04-17 [3] CRAN (R 4.5.0)
 packrat         0.7.0   2021-08-20 [3] CRAN (R 4.1.1)
 pillar          1.11.0  2025-07-04 [1] CRAN (R 4.5.0)
 pkgbuild        1.4.8   2025-05-26 [1] CRAN (R 4.5.0)
 pkgconfig       2.0.3   2019-09-22 [1] CRAN (R 4.5.0)
 pkgload         1.4.0   2024-06-28 [1] CRAN (R 4.5.0)
 plyr          * 1.8.9   2023-10-02 [1] CRAN (R 4.5.0)
 profvis         0.4.0   2024-09-20 [1] CRAN (R 4.5.0)
 promises        1.3.3   2025-05-29 [1] RSPM (R 4.5.0)
 proxy           0.4-27  2022-06-09 [1] CRAN (R 4.5.0)
 purrr         * 1.1.0   2025-07-10 [1] CRAN (R 4.5.0)
 R6              2.6.1   2025-02-15 [1] CRAN (R 4.5.0)
 RColorBrewer    1.1-3   2022-04-03 [1] CRAN (R 4.5.0)
 Rcpp            1.1.0   2025-07-02 [1] CRAN (R 4.5.0)
 readr         * 2.1.5   2024-01-10 [1] CRAN (R 4.5.0)
 remotes         2.5.0   2024-03-17 [1] CRAN (R 4.5.0)
 rlang           1.1.6   2025-04-11 [1] CRAN (R 4.5.0)
 rmarkdown       2.30    2025-09-28 [1] CRAN (R 4.5.0)
 rstudioapi      0.17.1  2024-10-22 [1] CRAN (R 4.5.0)
 s2              1.1.9   2025-05-23 [1] CRAN (R 4.5.0)
 S7              0.2.0   2024-11-07 [1] CRAN (R 4.5.0)
 scales          1.4.0   2025-04-24 [1] CRAN (R 4.5.0)
 sessioninfo     1.2.3   2025-02-05 [3] CRAN (R 4.5.0)
 sf            * 1.0-21  2025-05-15 [1] CRAN (R 4.5.0)
 shiny           1.10.0  2024-12-14 [1] CRAN (R 4.5.0)
 sketchy         1.0.5   2025-08-20 [1] CRANs (R 4.5.0)
 stringi         1.8.7   2025-03-27 [1] CRAN (R 4.5.0)
 stringr       * 1.5.2   2025-09-08 [1] CRAN (R 4.5.0)
 terra         * 1.8-60  2025-07-21 [1] CRAN (R 4.5.0)
 tibble        * 3.3.0   2025-06-08 [1] RSPM (R 4.5.0)
 tidyr         * 1.3.1   2024-01-24 [1] CRAN (R 4.5.0)
 tidyselect      1.2.1   2024-03-11 [1] CRAN (R 4.5.0)
 tidyverse     * 2.0.0   2023-02-22 [1] RSPM (R 4.5.0)
 timechange      0.3.0   2024-01-18 [3] CRAN (R 4.5.0)
 tzdb            0.5.0   2025-03-15 [1] CRAN (R 4.5.0)
 units           0.8-7   2025-03-11 [1] CRAN (R 4.5.0)
 urlchecker      1.0.1   2021-11-30 [1] CRAN (R 4.5.0)
 usethis         3.1.0   2024-11-26 [3] CRAN (R 4.5.0)
 vctrs           0.6.5   2023-12-01 [1] CRAN (R 4.5.0)
 withr           3.0.2   2024-10-28 [1] CRAN (R 4.5.0)
 wk              0.9.4   2024-10-11 [1] CRAN (R 4.5.0)
 xaringanExtra   0.8.0   2024-05-19 [1] CRAN (R 4.5.0)
 xfun            0.53    2025-08-19 [1] CRAN (R 4.5.0)
 xtable          1.8-4   2019-04-21 [3] CRAN (R 4.0.1)
 yaml            2.3.10  2024-07-26 [1] CRAN (R 4.5.0)

 [1] /home/m/R/x86_64-pc-linux-gnu-library/4.5
 [2] /usr/local/lib/R/site-library
 [3] /usr/lib/R/site-library
 [4] /usr/lib/R/library
 * ── Packages attached to the search path.

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