r - 您如何将大型 RasterStack 对象临时插入到更高的周期性(每周到每天)
问题描述
在 R 中,我试图在每周时间间隔创建的堆栈之间插入到每日时间间隔。插值方法可以是最近邻或线性插值。
我已经看到这可以使用 na.approx 或样条线对时间序列完成。
另外,如果可能,我想将对象保留为堆栈(无数据框)。
#Dummy example
#---#
library(raster)
# Create date sequence
idx <- seq(as.Date("2000/1/1"), as.Date("2000/12/31"), by = "week")
# Create raster stack and assign dates
r <- raster(ncol=20, nrow=20)
s <- stack(lapply(1:length(idx), function(x) setValues(r,
runif(ncell(r)))))
s <- setZ(s, idx)
# Do interpolation to daily resolution
# (Perhaps it should be done one by one, perhaps all at once...)
# ...
假设我的实际堆栈尺寸为 c(20,20,52),结果的尺寸为 c(20,20,366)。
感谢您的帮助
解决方案
您需要编写一个函数f
,为向量(单元格)执行此操作,例如s[1]
。然后使用 应用此函数calc
,如calc(s, f)
这是一个使用approx
, 的简单示例,可以用样条线或其他插值器替换
library(raster)
r <- raster(ncol=20, nrow=20)
s <- stack(lapply(1:length(idx), function(x) setValues(r, runif(ncell(r)))))
idx <- seq(as.Date("2000/1/1"), as.Date("2000/12/31"), by = "week")
dr <- seq(as.Date("2000/1/1"), as.Date("2000/12/31"), by = "day")
f <- function(x) approx(idx, x, dr, rule=2)$y
# test <- f(s[1])
x <- calc(s, f)
一个单元格的结果
plot(dr, as.vector(x[1]), pch="+")
points(idx, as.vector(s[1]), pch=20, col="red", cex=2)
lines(idx, as.vector(s[1]), col="blue")
推荐阅读
- mysql - 为什么我可以在 mysql 中使用没有任何 START TRANSACTION 或 COMMIT/ROLLBACK 且 autocommit = 0 的 INSERT?
- asp.net - 如何将代码放在 PartialView 的 or 元素中以避免代码重复?
- r - 如何在 LaTeX 表中仅显示四舍五入为整数的系数?
- git - GIT(实验室):从合并请求中的分支创建分支
- java - 连接到 Firebird 数据库时出错
- javascript - 刷新浏览器后保留 Todo 结果
- jquery - 为什么我的 Api 控制器中出现错误 500 和来自 ajax 请求的空数据?
- c - 在 tvOS 上通过 C 的 fopen 保存文件
- javascript - 如何删除逗号后的数字?
- c - C:将字符串映射到结构字段