2017-08-11 42 views
1

隨着光柵的下方,與NA的數量的增加值填寫的間隙(例如,不單電池)的NA使用鄰域分析

library(raster) 
filename <- system.file("external/test.grd", package="raster") 
r <- raster(filename) 
r[r<300] <- NA 
summary(getValues(r)) 

是有可能爲「填補」在柵格值僅NA細胞? 我一直在使用this helpful post,但如下所示,NA值仍保留在最終產品中。

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)) 
    } 
} 

r2 <- focal(r, w = matrix(1,3,3), fun = fill.na, 
      pad = TRUE, na.rm = FALSE) 
summary(getValues(r2)) 

我懷疑問題是與NA值的相鄰區域,如果有「填補」丟失數據的空白其他選項很納悶。

+0

請檢查[mcve] –

+0

嗯,你能更具體嗎? –

回答

2

一種方法是放大焦點窗口。

fill.na <- function(x) { 
    center = 0.5 + (width*width/2) 
    if(is.na(x)[center]) { 
    return(round(mean(x, na.rm=TRUE),0)) 
    } else { 
    return(round(x[center],0)) 
    } 
} 

然後:

width = 9 
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na, 
      pad = TRUE, na.rm = FALSE) 
summary(getValues(r2)) 

Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 
300.0 339.0 408.0 488.7 574.5 1806.0 4661 

你可以看到,您可以通過修改「fill.NA」功能採取width參數和計算的中心像素的對飛的位置這樣做新來港人數正在下降。

但是,請注意,由於您的「洞」在柵格外部區域具有相同的NA值,因此這也會擴大柵格的外側,從而爲您提供僞造值。例如參見:

width = 15 
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na, 
      pad = TRUE, na.rm = FALSE) 
plot(rast) 

enter image description here

因此,你必須找到一種方法的數據集的範圍之外「真」 NA值,和值來區分。

HTH。