Skip to content

Instantly share code, notes, and snippets.

@kokkytos
Created November 22, 2019 19:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kokkytos/5d554b5a725bb48d2189e2d1fa0e2206 to your computer and use it in GitHub Desktop.
Save kokkytos/5d554b5a725bb48d2189e2d1fa0e2206 to your computer and use it in GitHub Desktop.
Calculate median per day of week
# Calculate median per day of week
library(lubridate)
library(raster)
library(magrittr)
r <- raster(nrows = 10, ncols = 10, res = 1,
xmn = 0,
xmx = 10,
ymn = 0,
ymx = 10)
n=2000
mydates <- seq(as.Date("2012-01-19"), by = "day", length.out = n)
set.seed(5);
mystack <- raster::stack(lapply(1:n, function(i) {r<-raster::setValues(r,floor(runif(ncell(r), min=1, max=1000)));return(r)})) %>%
setNames(mydates) %>%
raster::setZ(mydates)
myindices <- lubridate::wday(raster::getZ(mystack), week_start = 1) # "Monday"=1,
### stackApply method
###
stackapply_median<- raster::stackApply(mystack, indices=myindices,fun=function(x,...){(median(x, na.rm = T))})
#### my verification
####
ver <- function(myday, s){
sub_s <- raster::subset(s,which(lubridate::wday(raster::getZ(s),week_start = 1) == myday))
m <- calc(sub_s, median,na.rm = T)
return(m)
}
ver_median <- raster::stack(sapply(c(1:7), ver, s=mystack))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment