Extraction de la moyenne de plusieurs couches raster à l'aide de R?

8

Je ne sais pas comment gérer les mégadonnées que j'ai reçues des radars.

J'ai 144 images .tif par jour et je dois extraire une valeur quotidienne moyenne, pour chaque pixel, et l'exporter dans une image .tif.

J'ai pensé empiler toutes les 144 images, mais je ne sais pas comment continuer et comment exporter le résultat en une seule image.

J'avais commencé ça:

set("D:/R/Radar/Rasday1")
f <- list.files(getwd()) 
ras <- lapply(f,raster) 
STACK1 <- stack(ras)   ## with dimensions :1006, 804, 808824 (nrow, ncol, ncell)

Ensuite, je ne sais pas si c'est OK pour créer un raster et faire quelque chose comme:

r1<- raster(ncol=804, nrow=1006)
media<-mean(STACK1, r1)
Christopher D
la source

Réponses:

13

Utilisez calc()pour appliquer des fonctions sur un objet de trame, comme Raster, RasterStackou RasterBrick:

mean <- calc(STACK1, fun = mean)

Si vous avez na valeurs dans les cellules, ajoutez na.rm =T:

mean <- calc(STACK1, fun = mean, na.rm = T)

Alternativement, vous pouvez stackApplyégalement utiliser :

mean <- stackApply(STACK1, indices =  rep(1,nlayers(STACK1)), fun = "mean", na.rm = T)

Vous pouvez le faire dans une boucle pour appliquer cette fonction à chaque jour dans votre dossier radar:

library(raster)

dirs <- list.dirs("D:/R/Radar/", full.names = T, recursive = F)

means <- list()

for(i in 1:length(dirs)){
  setwd(dirs[i])
  f <- list.files(getwd()) 
  STACK1 <- stack(f)
  means[[i]] <- calc(STACK1, fun = mean, na.rm = T)
}

Pour enregistrer sous .tiff, utilisez la writeRasterfonction du rasterpackage:

library(raster)

writeRaster(x = mean, filename = "mean.tif", driver = "GeoTiff")
aldo_tapia
la source