如何使用 R 插值空间值?

Tho*_*asP 2 interpolation r raster spatial

I\xc2\xb4d 喜欢在栅格内插入缺失值:

\n
r <- rast(xmin=0, xmax=10, ymin=0, ymax=10, nrows=50, ncols=50)\ne =  rast(xmin=2, xmax=4, ymin=2, ymax=4, nrows=10, ncols=10)\nvalues(r) <- 1:ncell(r)\nvalues(e) <- 1:ncell(e)\n\nr=raster(r)\ne=raster(e)\nr[intersect(r,e)]=NA\nplot(r)\n
Run Code Online (Sandbox Code Playgroud)\n

我怎样才能做到这一点?

\n

栅格内缺失值

\n

我知道如何使用不同的方法(样条线、克里金法、IDW...)在点之间进行插值,但我不知道如何在多边形尺度上执行此操作。

\n

Sam*_*amR 5

由于这是二维数据,您可以将通常使用的相同插值函数应用于矩阵的每一列。例如,使用approx()

r_interp <- r |>
    as.matrix() |>
    apply(MARGIN = 2, \(x) approx(x)[["y"]]) |>
    raster()

plot(r_interp)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可能认为这只能有效,因为 x 轴上的每个值都是相同的,但它也适用于其他情况。例如,如果我们生成一个不同的矩阵并NA在明显的非线性区域添加更多值:

Z  <- as.matrix(r)
r_nonlin <- sapply(
    seq_len(ncol(Z)),
    \(i) Z[, i] * i
) |>
    raster()
# Create more NAs
r_nonlin[30:40, 30:40] <- NA

plot(r_nonlin)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我们仍然可以使用相同的方法:

r_nonlin |>
    as.matrix() |>
    apply(MARGIN = 2, \(x) approx(x)[["y"]]) |>
    raster() |>
    plot()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述