Média de extração de várias camadas rasterizadas usando R?

8

Não sei como lidar com grandes dados que eu tinha dos radares.

Tenho 144 imagens .tif por dia e preciso extrair um valor médio diário para cada pixel e exportá-lo em uma imagem .tif.

Pensei em empilhar todas as 144 imagens, mas não sei como continuar e como exportar o resultado em uma imagem.

Eu comecei isso:

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

Então não sei se não há problema em criar uma varredura e fazer algo como:

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

Respostas:

12

Use calc()para aplicar funções sobre um objeto raster, como Raster, RasterStackou RasterBrick:

mean <- calc(STACK1, fun = mean)

Se você tiver um valor nas células, adicione na.rm =T:

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

Como alternativa, você stackApplytambém pode usar :

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

Você pode fazer isso dentro de um loop para aplicar esta função a cada dia na sua pasta 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 salvar como .tiff, use a writeRasterfunção do rasterpacote:

library(raster)

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