【发布时间】:2019-08-05 08:24:28
【问题描述】:
我有一个RasterBrick,其中包含 72 年间隔内每个月的平均值一层。我想获得每年的平均值 - 即返回 72 层 RasterBrick。
以下代码已在其他类似的栅格上运行,产生了预期的结果(发现 here):
data <- raster::brick(".../air.mon.mean.nc", varname = "air")
index <- format(as.Date(raster::getZ(data), format = "%Y-%m-%d %H:%M:%S"), format = "%Y")
index <- as.numeric(index)
yearly <- raster::stackApply(data, index, fun = mean)
> yearly
class : RasterBrick
dimensions : 360, 720, 259200, 72 (nrow, ncol, ncell, nlayers)
resolution : 0.5, 0.5 (x, y)
extent : 0, 360, -90, 90 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
source : C:/Users/villar/AppData/Local/Temp/RtmpAbUQQT/raster/r_tmp_2019-08-05_102157_18368_64365.grd
names : index_1948, index_1949, index_1950, index_1951, index_1952, index_1953, index_1954, index_1955, index_1956, index_1957, index_1958, index_1959, index_1960, index_1961, index_1962, ...
min values : NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ...
max values : NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ...
但是,在此数据上运行时,它仅返回 NA 值。
fun = function(x, na.rm) {sum(x)/12} 不起作用,添加 na.rm = TRUE 也不起作用。
任何帮助将不胜感激!
数据从here (air.mon.mean.nc) 下载。
【问题讨论】:
-
在我的系统上,您似乎在格式化时间时犯了一个小错误:
raster::getZ(data)以"%Y-%m-%d"格式返回日期,而不是"%Y-%m-%d %H:%M:%S"。这意味着index全部为NA,因此stackApply无法正常工作,并且仅返回一个包含所有NA的层。无论如何,这不会发生在你身上,如果我使用"%Y-%m-%d",我可以重现你的结果。 -
出于某种原因,如果我先执行
fun = function(x, na.rm=TRUE) {sum(x, na.rm = na.rm)/12},然后执行yearly <- raster::stackApply(data, index, fun = fun)...,我就可以让它工作起来……但它都是0。