Respostas:
Você pode preencher os valores de NA usando a função focal com o argumento na.rm definido como FALSE e pad como TRUE.
library(raster)
r <- raster(matrix(1:16, nrow=8, ncol=8))
r[r==12] <- NA
Função para substituir o valor focal pela média de uma janela 3x3 se NA. Se o tamanho da janela aumentar, o valor do índice [i] também precisará ser alterado (por exemplo, para uma janela de 5x5, o índice seria 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) )
}
}
Passe a função fill.na para raster :: focal e verifique os resultados. O argumento pad cria linhas / colunas virtuais de valores de NA para manter o comprimento do vetor constante ao longo das bordas da varredura. É por isso que sempre podemos esperar que o quinto valor do vetor seja o valor focal em uma janela 3x3, assim, o índice i = 5 na função fill.na.
r2 <- focal(r, w = matrix(1,3,3), fun = fill.na,
pad = TRUE, na.rm = FALSE )
as.matrix(r)
as.matrix(r2)