Hi all,

I am trying to extract temperature values from a raster stack for about 400 
municipalities in Brazil. My final goal is to create a data frame that is going 
to be used as a database for an interactive map server - probably using shiny 
and leaflet.

The final data frame would look like this:


> head(df)
Location         Var Cut Year Month Freq
Campinas  temperature  10 2010   1    11
Campinas  temperature  10 2010   2    19
Campinas  temperature  10 2010   3    30
Campinas  temperature  10 2010   4    29
Campinas  temperature  10 2010   5    31
Campinas  temperature  10 2010   6    30


I have global raster stacks with daily data and I am counting, for each month 
in the raster, the number of days above certain temperature threshold. Please 
see below:


library(raster)
library(zoo)
library(maptools)

# Create a rasterStack similar to my data - same dimensions and layer namesr <- 
raster(ncol=360, nrow=180)
s <- stack(lapply(1:730, function(x) setValues(r, 
runif(ncell(r),min=0,max=30))))
idx <- seq(as.Date("2010/1/1"), by = "day", length.out = 730)
s <- setZ(s, idx)
s

# Define functions for 10, 15, 20 and 25 degrees - Thanks Loïc in my previous 
question
fun1 <- function(x, na.rm) {
sum(x > 10, na.rm)
}

fun2 <- function(x, na.rm) {
sum(x > 15, na.rm)
}

fun3 <- function(x, na.rm) {
sum(x > 20, na.rm)
}

fun4 <- function(x, na.rm) {
sum(x > 25, na.rm)
}

# Count number of days above the threshold temperature
days.above.10 <- zApply(s, by=as.yearmon, fun = fun1)
days.above.15 <- zApply(s, by=as.yearmon, fun = fun2)
days.above.20 <- zApply(s, by=as.yearmon, fun = fun3)
days.above.25 <- zApply(s, by=as.yearmon, fun = fun4)


Now, what I would like to do is to programmatically extract values for each 
location on my study area. The locations are defined as a shapefile with 
municipal contours of the Sao Paulo state in Brazil.


In this example, however, just for reproducibility's sake, I will be using a 
world polygon. But keep in mind that in my actual data the polygons will be 
much smaller.


# Import *sample* polygon data and subset only five "locations"
data(wrld_simpl)
locs <- subset(wrld_simpl, wrld_simpl@data$NAME %in% 
c("Argentina","Bolivia","Brazil","Paraguay","Uruguay"))

# Plot
plot(days.above.10,1)
plot(locs,add=T)


I feel like half of the work is done, but I am just grasping with the 
conversion to data frames.

Based on this self-contained example I provided, what would be the best 
strategy to come out with a data frame per location, like this?

> head(Argentina.df)
Location         Var Cut Year Month Freq
Argentina temperature  10 2010     1  11
Argentina temperature  10 2010     2  19
Argentina temperature  10 2010     3  30
Argentina temperature 10 2010     4  12
Argentina temperature 10 2010     5  17
Argentina temperature 10 2010     6  14


> head(Bolivia.df)
Location         Var Cut Year Month Freq
Bolivia   temperature  10 2010     1  29
Bolivia   temperature  10 2010     2  31
Bolivia   temperature  10 2010     3  30

Bolivia   temperature 10 2010     4  17
Bolivia   temperature 10 2010     5  19
Bolivia   temperature 10 2010     6  12

and so on.

Note that "cut" refers to the temperature thresholds defined in the functions 
above. Each cut should come from the equivalent raster stack: days.above.10, 
days.above.15 and so on.

I much appreciate any input. 
Greetings,
 -- Thiago V. dos Santos

PhD student
Land and Atmospheric Science
University of Minnesota

_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to