使用邻域分析填充栅格中 NA 值的间隙(例如,不是单个单元格)
Fill in gaps (e.g. not single cells) of NA values in raster using a neighborhood analysis
使用下面的栅格,NA 值的数量增加
library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)
r[r<300] <- NA
summary(getValues(r))
是否可以只 'fill in' 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 值的连续区域,并且想知道是否还有其他选项可以解决 'filling in' 缺失数据的差距。
一种方法是扩大你的注意力window。您可以通过修改 "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) )
}
}
然后:
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
可以看到NA的数量在下降。
但是,请注意,由于您的 "holes" 共享栅格外部区域的相同 NA 值,这也会在外侧扩展栅格,从而为您提供虚假值。参见示例:
width = 15
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na,
pad = TRUE, na.rm = FALSE)
plot(rast)
因此,您必须找到一种方法来区分 "true" NA 值和数据集范围之外的值。
HTH。
使用下面的栅格,NA 值的数量增加
library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)
r[r<300] <- NA
summary(getValues(r))
是否可以只 'fill in' 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 值的连续区域,并且想知道是否还有其他选项可以解决 'filling in' 缺失数据的差距。
一种方法是扩大你的注意力window。您可以通过修改 "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) )
}
}
然后:
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
可以看到NA的数量在下降。
但是,请注意,由于您的 "holes" 共享栅格外部区域的相同 NA 值,这也会在外侧扩展栅格,从而为您提供虚假值。参见示例:
width = 15
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na,
pad = TRUE, na.rm = FALSE)
plot(rast)
因此,您必须找到一种方法来区分 "true" NA 值和数据集范围之外的值。
HTH。