我正在尝试使用 terra 包计算 R 中栅格的焦点统计数据。我想要一个 3x3 移动窗口,并且想要计算最大栅格单元。完成此操作后,我将原始栅格和“焦点统计”栅格转换为数据框。
当我检查数据帧时,我发现焦点统计数据帧具有 NA 值,但原始栅格在这些像元编号处具有值。我不明白怎么会这样。如果 3x3 窗口只有一个值,那不是会设置为最大值吗?
这是我正在使用的栅格:
这是我使用的代码:
temp.ras = terra::rast('forecast_NO2_Base00_20240527_H010.tif') * 1000000000
# set the extent
terra::ext(temp.ras) <- c(-39.58222, 26.02778, -31.905, 22.005)
# set the crs
crs(temp.ras) = "+proj=ob_tran +o_proj=longlat +o_lon_p=0 +o_lat_p=31.758312 +lon_0=-92.402969 +R=6371229 +no_defs"
# here we apply focal values
temp.ras.focal = focal(temp.ras, w=3, fun = 'max', na.policy='all')
temp.df.focal = as.data.frame(temp.ras.focal, na.rm = FALSE,
cell = TRUE)
temp.df = as.data.frame(temp.ras, na.rm = FALSE,
cell = TRUE)
如果我们数一下
NA
中有多少个temp.df.focal
:
> sum(is.na(temp.df.focal$focal_max))
[1] 2652
我们看到它与栅格中边缘单元的数量相同:
> sum(dim(temp.ras)[1:2]*2) - 4
[1] 2652
这是因为
focal
将 NA
放入移动窗口超出栅格的像元中。要解决此问题,请将参数 expand = TRUE
添加到 focal
:
temp.ras.focal = focal(temp.ras, w=3, fun = 'max', na.policy='all', expand=TRUE)
现在生成的数据框不包含
NA
s:
> sum(is.na(temp.df.focal$focal_max))
[1] 0