¿Extraer la media de múltiples capas ráster usando R?

8

No sé cómo lidiar con los grandes datos que tenía de los radares.

Tengo 144 imágenes .tif por día y necesito extraer un valor medio diario, para cada píxel, y exportarlo en una imagen .tif.

Pensé en apilar las 144 imágenes, pero no sé cómo continuar y cómo exportar el resultado en una imagen.

Yo empecé esto:

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

Entonces no sé si está bien crear un ráster y hacer algo como:

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

Respuestas:

12

Se usa calc()para aplicar funciones sobre un objeto ráster, como Raster, RasterStacko RasterBrick:

mean <- calc(STACK1, fun = mean)

Si tiene valores na en las celdas, agregue na.rm =T:

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

Alternativamente, puede usar stackApplytambién:

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

Puede hacer esto dentro de un bucle para aplicar esta función a cada día en su carpeta de 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)
}

Para guardar como .tiff, use la writeRasterfunción del rasterpaquete:

library(raster)

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