我尝试根据相邻单元格的平均值填充
SpatialPixelsDataFrame
中的 NA 个单元格。我想知道是否有任何自动化方法相当于 focal
中的 terra
函数(参见 here)。
library(sp)
library(sf)
library(raster)
library(SpatialEco)
m <- raster::raster(ncol=20, nrow=20) # create raster
m[] <- runif(ncell(m))
m[m < 0.2] <- NA # simulate NAs
spdf <- as(m, "SpatialPixelsDataFrame") # transform to SpatialPixelsDataFrame
有趣的是,您可以使用
raster::focal()
。 raster
中的大多数函数名称已直观地迁移到 terra
。但是,某些参数名称,例如 NAonly = TRUE
中的 raster
现在是 na.policy = "only"
中的 terra
。
以下是如何使用
raster
实现您想要的目标:
library(raster)
# Loading required package: sp
# Create sample RasterLayer
set.seed(1)
m <- raster::raster(ncol=20, nrow=20)
m[] <- runif(ncell(m))
m[m < 0.2] <- NA
plot(m, colNA = "black") # NA coloured black to illustrate
现在应用
raster::focal()
用邻居的平均值填充 NA:
# Expand/pad the raster to accommodate edge NAs
m1 <- extend(m, c(1, 1))
# Fill NAs with mean of neighbours
m1 <- raster::focal(m1,
w = matrix(1, 3, 3),
fun = mean,
NAonly = TRUE,
na.rm = TRUE)
# Crop padded cells to return original extent
m1 <- crop(m1, extent(m))
plot(m1, colNA = "black")
然后根据需要转换为 SpatialPixelsDataFrame:
spdf <- as(m1, "SpatialPixelsDataFrame")