10 votos

Rellena los huecos utilizando los vecinos más cercanos

Quiero rellenar los valores NA utilizando los valores medios de los vecinos más cercanos:

r <- raster(matrix(1:16, nrow=8, ncol=8))
r[r==12] <- NA

19voto

Dan Puntos 16

Puede rellenar los valores NA utilizando la función focal con el argumento na.rm ajustado a FALSE y pad a TRUE.

library(raster)
  r <- raster(matrix(1:16, nrow=8, ncol=8))
  r[r==12] <- NA

Función que sustituye el valor focal por 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 compruebe los resultados. El argumento pad crea filas/columnas virtuales de valores NA para mantener la longitud del vector constante a lo largo de los bordes de la trama. Por eso siempre podemos esperar que el quinto valor del vector sea el valor focal en una ventana de 3x3, de ahí 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)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X