B. *_*vis 3 gis r raster r-raster
随着下面的栅格,NA值数量增加
library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)
r[r<300] <- NA
summary(getValues(r))
Run Code Online (Sandbox Code Playgroud)
是否可以仅“填充” NA细胞?我一直在使用此有用的帖子,但如下所示,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))
Run Code Online (Sandbox Code Playgroud)
我怀疑问题在于具有NA值的连续区域,并且想知道是否还有其他选择可以“填补”缺失数据的空白。
一种方法是扩大焦点窗口。您可以通过修改“ fill.NA”函数以接受width参数并动态计算中心像素的位置来实现:
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) )
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
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
Run Code Online (Sandbox Code Playgroud)
您会看到NA的数量正在减少。
但是,请注意,由于您的“孔”共享栅格外部区域的相同NA值,因此这也会在外侧扩展栅格,使您得到虚假的值。参见例如:
width = 15
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na,
pad = TRUE, na.rm = FALSE)
plot(rast)
Run Code Online (Sandbox Code Playgroud)
因此,您必须找到一种方法来区分“真实” NA值和数据集范围之外的值。
HTH。
| 归档时间: |
|
| 查看次数: |
1051 次 |
| 最近记录: |