Extrahieren des Mittelwerts mehrerer Rasterebenen mit R?


8

Ich weiß nicht, wie ich mit Big Data umgehen soll, die ich von Radargeräten hatte.

Ich habe 144 Bilder .tif pro Tag und muss für jedes Pixel einen mittleren Tageswert extrahieren und in ein Bild .tif exportieren.

Ich dachte, ich würde alle 144 Bilder stapeln, aber ich weiß nicht, wie ich fortfahren und wie ich das Ergebnis in ein Bild exportieren soll.

Ich hatte damit angefangen:

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

Dann weiß ich nicht, ob es in Ordnung ist, ein Raster zu erstellen und so etwas wie:

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

Antworten:


12

Verwenden Sie calc()Funktionen über ein Rasterobjekt anzuwenden, wie Raster, RasterStackoder RasterBrick:

mean <- calc(STACK1, fun = mean)

Wenn Sie na-Werte in Zellen haben, fügen Sie hinzu na.rm =T:

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

Alternativ können Sie auch verwenden stackApply:

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

Sie können dies in einer Schleife tun, um diese Funktion auf jeden Tag in Ihrem Radarordner anzuwenden:

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)
}

.tiffVerwenden Sie zum Speichern unter die writeRasterFunktion aus dem rasterPaket:

library(raster)

writeRaster(x = mean, filename = "mean.tif", driver = "GeoTiff")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.