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)

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")
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.