首页 > 解决方案 > 在具有多个变量(列)的栅格对象之间重新采样

问题描述

我正在尝试从具有 2.5° x 2.5° 分辨率(5760 坐标 - 行)的栅格数据集(REF)到另一个具有 0.5° x 0.5° 分辨率(61143 坐标 - 行)的栅格数据集(OBS)创建双线性插值。

每个数据集包含跨列 27 年的每日温度(总共 9862 列)。

REF    Large SpatialPixelsDataFrame (5760 elements, 435.1 Mb)
 ..@ data :'data.frame': 5760 obs. of 9862 variables
 ...... ..$ 1979.01.01.: num [1:5760] -0.568 -0.166 -0.172 ...
 ...... ..$ 1979.01.02.: num [1:5760] -1.606 -0.915 -0.702 ...
 ...... ..$ 1979.01.03.: num [1:5760] -0.856 -0.037 -0.339 ...

OBS    Large SpatialPixelsDataFrame (61143 elements, 4.5 Gb)
 ..@ data :'data.frame': 61143 obs. of 9862 variables
 ...... ..$ 1979.01.01.: num [1:61143] -10.4 -10.6 -10.7 ...
 ...... ..$ 1979.01.02.: num [1:61143] -7.76 -7.99 -8.25 ...
 ...... ..$ 1979.01.03.: num [1:61143] -7.35 -7.52 -7.72 ...

我尝试了以下方法:

coordinates(OBS) = ~ X.x. + X.y.
gridded(OBS) = TRUE
OBS.R = raster(OBS)

coordinates(REF) = ~ X.x. + X.y.
gridded(REF) = TRUE
REF.R = raster(REF)

RS = resample(REF.R, OBS.R, method = "bilinear")

这会产生所需的输出,但仅限于第一个变量(即 9862 天记录的第一天)。如何调整上述内容以生成整个 27 年记录的插值栅格数据集?

标签: r

解决方案


如果您已经拥有 SpatialPixels* 对象,则不需要此部分。

#coordinates(REF) = ~ X.x. + X.y.
#gridded(REF) = TRUE

我确实想知道您是如何获得它们的(也就是说,如果它们来自文件,则可能是不必要的中间步骤)

无论如何,您需要使用brick而不是raster获取所有图层

OBS.R <- brick(OBS)
REF.R <- brick(REF)
RS <- resample(REF.R, OBS.R, method = "bilinear")

推荐阅读