【问题标题】:RasterStack/Brick for multiple variables from multiple files in multiple folders RRasterStack/Brick 用于来自多个文件夹中的多个文件的多个变量 R
【发布时间】:2016-06-26 02:28:57
【问题描述】:
library(raster)

我正在处理一项相对复杂的任务,需要有关如何完成它的提示。

  • 我的数据是从 1910 年到 2000 年的每日时间尺度的栅格时间序列。

  • 每个栅格 (.asc) 文件代表一个时间步长。

  • 数据存储在文件夹中,每个文件夹包含 1 年的数据(总共 91 个文件夹)。每个文件夹中有 1095 个文件。在这 1095 个文件中,Tmin=365、Tmax=365 和 precip=365 对应于一年中的 365 天。所有年份都被格式化为闰年,其中 2 月为 29 天,而无闰年则缺少儒略日第 60 天。

  • 在每个文件夹中,三个变量(Tmin、Tmax、precip)标记为max1910_1.asc,min1910_1.asc, precip1910_1.asc 等,直到 365。

任务:

1) 我想将所有文件导入 R。我可以使用以下方法获取文件路径:

files <- dir("C:/data//, recursive=TRUE, full.names=TRUE, pattern="\\.asc$")# 

2) 为每个变量(即 TminStack、TmaxStack 和 PrecipStack)制作一个 rasterstack/brick。

在三个单独的栅格堆栈中,layer1 应该是 Jan-01-1910,最后一层是 Dec-31-2000 的数据。

3) 最后,我将有 3 个时间序列栅格堆栈,分别对应于 Tmax、Tmin 和 precip。我可以使用以下方法在三个栅格堆栈中设置时间轴:

dates=seq(as.POSIXct("1910-01-01"), as.POSIXct("2000-12-31"), by="day")
TminStack <- setZ(TminStack,dates)
TmaxStack <- setZ(TmaxStack,dates)
precipStack <- setZ(precipStack,dates)

我无法提供可重现的示例,因为文件很大并且每年都存储在单独的文件夹中。

非常感谢,

山姆。

【问题讨论】:

    标签: r date maps time-series raster


    【解决方案1】:

    您可以根据名称选择文件,如下所示:

    TminStack <- list.files(path=".", pattern=paste("min",".*.asc",sep=""), all.files=FALSE, full.names=TRUE,recursive=TRUE)
    

    【讨论】:

    • 在每个文件夹中,三个变量的文件名都标记为max1910_1.asc,min1910_1.asc, precip1910_1.asc,所以如果我运行;TminStack &lt;- list.files(path=".", pattern=paste(min,".*.asc",sep=""), all.files=FALSE, full.names=TRUE,recursive=TRUE);我收到错误Error in paste(min, ".*.asc", sep = "") : cannot coerce type 'builtin' to vector of type 'character'。在问题的任务 1 中,我可以读取所有文件路径。问题是如何提取具有 min、max 和 precip 的路径并形成单独的栅格堆栈?
    • 代码运行良好,只是文件名没有很好地排序,这意味着raster::stack 不会正确堆叠时间序列,除非stack 在内部对文件名进行排序。这些是我得到的:> head(TminStack) [1] "./canada_daily1950/1950/min1950_1.asc" "./canada_daily1950/1950/min1950_10.asc" [3] "./canada_daily1950/1950/min1950_100.asc" "./canada_daily1950/1950/min1950_101.asc" [5] "./canada_daily1950/1950/min1950_102.asc" "./canada_daily1950/1950/min1950_103.asc" 但使用 require(gtools) TmnStack=mixedsort(TminStack) 会给出正确的文件顺序。
    猜你喜欢
    • 2015-12-25
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多