Quiero completar los valores de NA utilizando los valores promedio de los vecinos más cercanos:
r <- raster(matrix(1:16, nrow=8, ncol=8))
r[r==12] <- NA
Puede completar los valores de NA utilizando la función focal con el argumento na.rm establecido en FALSE y el pad en TRUE.
library(raster)
r <- raster(matrix(1:16, nrow=8, ncol=8))
r[r==12] <- NA
Función para reemplazar el valor focal con la media de una ventana de 3x3 si NA. Si el tamaño de la ventana aumenta, el valor del índice [i] también debe cambiar (por ejemplo, para una ventana de 5x5, el índice sería 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) )
}
}
Pase la función fill.na a raster :: focal y verifique los resultados. El argumento pad crea filas / columnas virtuales de valores de NA para mantener constante la longitud del vector a lo largo de los bordes del ráster. Es por eso que siempre podemos esperar que el quinto valor del vector sea el valor focal en una ventana de 3x3, por lo tanto, el índice i = 5 en la función fill.na.
r2 <- focal(r, w = matrix(1,3,3), fun = fill.na,
pad = TRUE, na.rm = FALSE )
as.matrix(r)
as.matrix(r2)