Antworten:
Sie können die NA-Werte mithilfe der Fokusfunktion mit dem Argument na.rm auf FALSE und dem Pad auf TRUE eingeben.
library(raster)
r <- raster(matrix(1:16, nrow=8, ncol=8))
r[r==12] <- NA
Funktion zum Ersetzen des Brennwerts durch den Mittelwert eines 3x3-Fensters bei NA. Wenn sich die Fenstergröße erhöht, muss sich auch der Indexwert [i] ändern (z. B. für ein 5x5-Fenster wäre der Index 13).
fill.na <- function(x, i=5) {
if( is.na(x)[i] ) {
return( round(mean(x, na.rm=TRUE),0) )
} else {
return( round(x[i],0) )
}
}
Übergeben Sie die Funktion fill.na an raster :: focal und überprüfen Sie die Ergebnisse. Das Pad-Argument erstellt virtuelle Zeilen / Spalten mit NA-Werten, um die Vektorlänge entlang der Kanten des Rasters konstant zu halten. Aus diesem Grund können wir immer erwarten, dass der fünfte Wert des Vektors der Brennwert in einem 3x3-Fenster ist, also der Index i = 5 in der Funktion fill.na.
r2 <- focal(r, w = matrix(1,3,3), fun = fill.na,
pad = TRUE, na.rm = FALSE )
as.matrix(r)
as.matrix(r2)