You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于日期对齐的R terra包栅格栈均值计算方法求助

使用terra包处理日期偏移的栅格栈均值计算

核心思路

先匹配两个栅格栈的日期,对重叠日期的栅格计算均值,再将均值结果与两个栈中不重叠的部分合并,最后按时间排序保证序列逻辑。

代码实现

首先加载terra包并模拟符合需求的示例栅格栈(如果已有实际数据,可跳过模拟部分):

library(terra)

# 模拟第一个栅格栈(时间:2020-05-01至2020-05-05)
r1 <- rast(nrow=10, ncol=10, nlyr=5)
values(r1) <- runif(ncell(r1)*5)
time(r1) <- as.POSIXct(c("2020-05-01 00:00:00 UTC", "2020-05-02 00:00:00 UTC", 
                         "2020-05-03 00:00:00 UTC", "2020-05-04 00:00:00 UTC", 
                         "2020-05-05 00:00:00 UTC"), tz="UTC")

# 模拟第二个栅格栈(时间:2020-05-03至2020-05-07)
r2 <- rast(nrow=10, ncol=10, nlyr=5)
values(r2) <- runif(ncell(r2)*5)
time(r2) <- as.POSIXct(c("2020-05-03 00:00:00 UTC", "2020-05-04 00:00:00 UTC", 
                         "2020-05-05 00:00:00 UTC", "2020-05-06 00:00:00 UTC", 
                         "2020-05-07 00:00:00 UTC"), tz="UTC")

接下来处理日期匹配与均值计算:

# 提取栅格栈的日期(转换为Date格式简化比较)
dates_r1 <- as.Date(time(r1))
dates_r2 <- as.Date(time(r2))

# 找出两个栈共有的日期
common_dates <- intersect(dates_r1, dates_r2)

# 筛选出两个栈中对应共有日期的栅格
r1_common <- r1[[dates_r1 %in% common_dates]]
r2_common <- r2[[dates_r2 %in% common_dates]]

# 计算共有日期的栅格均值,保留原始时间信息
r_common_mean <- mean(r1_common, r2_common)
time(r_common_mean) <- as.POSIXct(paste0(common_dates, " 00:00:00 UTC"), tz="UTC")

# 提取两个栈中独有的日期栅格
r1_unique <- r1[[!dates_r1 %in% common_dates]]
r2_unique <- r2[[!dates_r2 %in% common_dates]]

# 合并所有结果并按时间排序
final_result <- c(r1_unique, r_common_mean, r2_unique)
final_result <- final_result[[order(time(final_result))]]

验证结果

通过以下代码查看最终结果的时间序列,确认处理逻辑正确:

# 查看最终结果的时间
time(final_result)

内容的提问来源于stack exchange,提问作者San-Diego-WX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:52:47