基于日期对齐的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
相关产品推荐
相关产品推荐

