Je veux remplir les valeurs NA en utilisant les valeurs moyennes des voisins les plus proches:
r <- raster(matrix(1:16, nrow=8, ncol=8))
r[r==12] <- NA
Vous pouvez remplir les valeurs NA à l'aide de la fonction focale avec l'argument na.rm défini sur FALSE et le pad sur TRUE.
library(raster)
r <- raster(matrix(1:16, nrow=8, ncol=8))
r[r==12] <- NA
Fonction pour remplacer la valeur focale par la moyenne d'une fenêtre 3x3 si NA. Si la taille de la fenêtre augmente, la valeur d'index [i] doit également changer (par exemple, pour une fenêtre 5x5, l'index serait 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) )
}
}
Passez la fonction fill.na à raster :: focal et vérifiez les résultats. L'argument pad crée des lignes / colonnes virtuelles de valeurs NA pour maintenir la longueur du vecteur constante le long des bords du raster. C'est pourquoi on peut toujours s'attendre à ce que la cinquième valeur du vecteur soit la valeur focale dans une fenêtre 3x3 donc, l'indice i = 5 dans la fonction fill.na.
r2 <- focal(r, w = matrix(1,3,3), fun = fill.na,
pad = TRUE, na.rm = FALSE )
as.matrix(r)
as.matrix(r2)