Saya ingin mengisi nilai NA menggunakan nilai rata-rata tetangga terdekat:
r <- raster(matrix(1:16, nrow=8, ncol=8))
r[r==12] <- NA
Anda dapat mengisi nilai-nilai NA menggunakan fungsi fokus dengan argumen na.rm diatur ke FALSE dan pad ke TRUE.
library(raster)
r <- raster(matrix(1:16, nrow=8, ncol=8))
r[r==12] <- NA
Berfungsi untuk mengganti nilai fokus dengan rata-rata jendela 3x3 jika NA. Jika ukuran jendela meningkatkan nilai indeks [i] perlu berubah juga (mis., Untuk jendela 5x5 indeks akan menjadi 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) )
}
}
Lewati fungsi fill.na ke raster :: focal dan periksa hasilnya. Argumen pad membuat baris / kolom virtual nilai NA untuk menjaga panjang vektor konstan di sepanjang tepi raster. Inilah sebabnya mengapa kita selalu dapat mengharapkan nilai kelima vektor menjadi nilai fokus dalam jendela 3x3 dengan demikian, indeks i = 5 pada fungsi fill.na.
r2 <- focal(r, w = matrix(1,3,3), fun = fill.na,
pad = TRUE, na.rm = FALSE )
as.matrix(r)
as.matrix(r2)