聚合RasterBrick后丢失时间维度,如何获取各图层对应准确日期?
解决RasterBrick聚合后时间维度丢失的问题
当使用aggregate()处理带Z维度的RasterBrick时,默认不会保留原始时间信息,需要手动计算聚合后的对应日期序列,以下是两种可行方案:
方案1:基于固定间隔生成聚合日期
你的聚合参数fact=c(5,6,7)中,第三个值7表示将每7个连续的原始图层(对应7天数据)聚合为一个新图层。如果原始时间序列是连续的每日数据,可以直接按固定步长提取日期:
# 提取每7天的起始日期(可按需改为中间/结束日期) agg_tim <- tim[seq(1, length(tim), by = 7)] # 若需取每组中间日期,替换为: # agg_tim <- tim[floor(seq(1, length(tim), by = 7)) + 3] # 为聚合后的RasterBrick重新设置Z维度 weekly.5 <- setZ(weekly.5, agg_tim, name = "Date") # 生成rts时间序列对象 library(rts) rt <- rts(weekly.5, agg_tim) plot(rt[15])
方案2:针对非连续时间序列的分组聚合
如果原始数据存在日期缺失,无法用固定步长分组,可以先按聚合规则生成分组索引,再对日期进行分组统计:
# 为每个原始图层分配聚合组编号 group <- ceiling(seq_along(tim) / 7) # 按组提取日期(此处取每组第一个日期,可替换为mean取平均日期) agg_tim <- tapply(tim, group, function(x) x[1]) agg_tim <- as.POSIXct(agg_tim, origin = "1970-01-01", tz = "UTC") # 为聚合后的图层绑定日期维度 weekly.5 <- setZ(weekly.5, agg_tim, name = "Date") # 创建rts对象 rt <- rts(weekly.5, agg_tim)
注意事项
- 确认时间维度的聚合倍数
7与原始数据的时间间隔匹配:如果原始数据不是每日频度,需要调整分组步长(比如原始是每2天一条数据,要得到周聚合则步长改为3或4)。 - 日期的选择(起始/中间/平均)根据分析需求决定,周平均场景下使用中间日期或平均日期更符合逻辑。
内容的提问来源于stack exchange,提问作者Kaila Frazer
相关产品推荐
相关产品推荐

