在 SpatialPixelsDataFrame 中填充 NA 值:相当于 terra::focal?

问题描述 投票:0回答:1

我尝试根据相邻单元格的平均值填充

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
na terra r-sp
1个回答
0
投票

有趣的是,您可以使用

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

1

现在应用

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

2

然后根据需要转换为 SpatialPixelsDataFrame:

spdf <- as(m1, "SpatialPixelsDataFrame")
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.