knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval=F )
Set file directory and load required packages
#Automatically install required packages, which are not yet installed packages <- c("raster", "dplyr", "tidyr", "remotes") new.packages <- packages[!(packages %in% installed.packages()[,"Package"])] if(length(new.packages)) install.packages(new.packages); rm(new.packages) # Load packages l <- sapply(packages, require, character.only = TRUE, quietly=TRUE); rm(packages, l) # Instal missing packages from GitHub packages_github <- c("rasterSp", "climateNiche") new.packages <- packages_github[!(packages_github %in% installed.packages()[,"Package"])] if(length(new.packages)) remotes::install_github(paste0("RS-eco/", new.packages)) rm(new.packages)
# Load small range data data("amphibians_dist_smallrange", package="rasterSp") data("ter_birds_dist_smallrange", package="rasterSp") data("ter_mammals_dist_smallrange", package="rasterSp") # Get species names amphinames <- as.character(unique(amphibians_dist_smallrange$species)) avesnames <- as.character(unique(ter_birds_dist_smallrange$species)) mamanames <- as.character(unique(ter_mammals_dist_smallrange$species))
For information on how to create the gbif_database, see the vignette("create-gbif-db")
vignette.
# Connect to GBIF database con <- DBI::dbConnect(RSQLite::SQLite(), dbname=paste0(filedir,"/gbif_database.sqlite")) gbif <- tbl(con, "gbif") # Run loop for all species of each of the three taxa dataG <- lapply(1:3, function(j){ taxa <- list(amphinames, mamanames, avesnames)[[j]] dataG <- list() for(i in 1:length(taxa)){ #collect data from gbif data <- gbif %>% filter(species == taxa[i]) %>% collect() %>% data.frame() #get rid of data missing long or lat data <- data[which(!is.na(data$decimallatitude) & !is.na(data$decimallongitude)),] dataG[[taxa[[i]]]] <- data #I added a break-signal after reaching x species for testing #if(i == 50){break} } return(dataG) }) # Disconnect from database DBI::dbDisconnect(con); rm(gbif,con) # Assign correct filename to data for(j in 1:3){assign(x=paste0(c("amphibians", "ter_mammals", "ter_birds")[j], "_smallrange_GBIF"), value=dataG[[j]])}
data <- lapply(1:3, function(j){ r_dataG <- list() dataLess2G <- character() group <- c("amphibians", "ter_mammals", "ter_birds")[j] dataG <- get(load(paste0("data/", group, "_smallrange_GBIF.rda"))) for(i in 1:length(dataG)){ #collect data from List data <- dataG[[i]] #data should have at least 2 data points if(length(unique(data$decimallatitude))+length(unique(data$decimallongitude))>=4){ #rasterizePoints r_data <- rasterSp::rasterizePoints(data,long = "decimallongitude", lat = "decimallatitude", res = 0.25); rm(data) names(r_data) <- names(dataG)[[i]] r_dataG[[i]] <- r_data; rm(r_data) } else{ # #if there are less than 2 data-points the species name is saved in another list, to have # #the opportunity to check for errors in the data-set like spelling-errors etc. dataLess2G[[i]] <- names(dataG)[[i]]; rm(data) } #I added a break-signal after reaching x species for testing #if(i == 50){break} } #save the Data as rasterStack r_dataG <- Filter(Negate(is.null), r_dataG) r_dataG <- raster::stack(r_dataG) return(r_dataG) })
Get data, turn into dataframe and combine all three taxa
#convert to one data.frame amphiSmall_GBIF <- do.call("rbind", amphibians_smallrange_GBIF) mamaSmall_GBIF <- do.call("rbind", ter_mammals_smallrange_GBIF) avesSmall_GBIF <- do.call("rbind", ter_birds_smallrange_GBIF) amphiSmall_GBIF$taxa <- "amphibians" amphiSmall_GBIF$total <- length(amphinames) mamaSmall_GBIF$taxa <- "ter_mammals" mamaSmall_GBIF$total <- length(mamanames) avesSmall_GBIF$taxa <- "ter_birds" avesSmall_GBIF$total <- length(avesnames) alltaxa_small_GBIF <- rbind(amphiSmall_GBIF, mamaSmall_GBIF, avesSmall_GBIF)
Check number of species with GBIF data
alltaxa_small_GBIF %>% select(taxa, species, total) %>% tidyr::drop_na() %>% group_by(taxa) %>% summarise(n = n_distinct(species), total=mean(total)) %>% mutate(perc = round(n/total*100, digits=2)) %>% knitr::kable()
Check number of species with GBIF data and more than 10 occurrences
alltaxa_small_GBIF %>% select(taxa, species, total) %>% tidyr::drop_na() %>% group_by(species) %>% filter(n() > 10) %>% ungroup() %>% group_by(taxa) %>% summarise(n = n_distinct(species), total=mean(total)) %>% mutate(perc = round(n/total*100, digits=2)) %>% knitr::kable()
group <- c("amphibians", "ter_mammals", "ter_birds")[1] # Create plot climateNiche::plotSp(r_dataG[[1:5]])
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.