TransWikia.com

How do I perform mathematic operations on raster data in R?

Geographic Information Systems Asked by cherrychips on May 28, 2021

I downloaded a lot of WorldClim data, but there are some things that I wish to calculate that aren’t given by WorldClim, like biotemperature and the aridity index. Biotemperature is definied by adding the mean temperature of each month, excluding months that have an average temperature below 0 degrees celsius, and dividing the sum by 12. Is there any way in R to do this using temperature data from WorldClim?

2 Answers

You can do mathematics with rasters with the usual mathematical operators.

There are assorted functions in the raster package for doing grouped functions, like monthly averages over stack of rasters.

There's also the terra package which works with rasters and should be faster than raster.

Answered by Spacedman on May 28, 2021

Install the geodata package to download some WorldClim data

# install.packages("remotes")
remotes::install_github("rspatial/geodata", dependencies=FALSE)

library(terra)
library(geodata)
wc <- worldclim_country("Iceland",  "tavg", ".")

A fast and simple approach

bio1 <- mean( clamp(wc, 0, Inf) )

A more general, but slower, approach

biotemp <- function(x) {
    x[x < 0] <- 0
    rowMeans(x)
}

bio2 <- app(wc, biotemp)

A perhaps more direct approach is also possible

wc[wc < 0] <- 0
bio3 <- mean(wc)

This works fine small data sets that can be held in memory. But with larger datasets the performance deteriorates (perhaps even fails), especially with more involved computations as lots of temporary files may be created.

Answered by Robert Hijmans on May 28, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP