gpt4 book ai didi

r - 如何按时间索引 SpatRaster 对象中的各个图层?

转载 作者:行者123 更新时间:2023-12-05 03:20:10 25 4
gpt4 key购买 nike

前几天我或多或少偶然发现,可以根据一般时间属性(c.f. here)从 SpatRaster 对象查询图层,例如基于年份(r[ "2017"]) 和年月 (r["2017-10"])。

现在我想深入探讨一下,因为在处理时空数据时您可以获得极大的灵 active 。不幸的是,由于以下错误,我似乎从一开始就失败了,无法重现之前的行为:[subset] no (valid) layer selected

library(terra)
#> terra 1.6.3

r <- rast(ncols = 10, nrows = 10, nlyr = 365)


time(r) <- seq(from = as.POSIXlt("2001-01-01", tz = "UTC"),
to = as.POSIXlt("2001-12-31", tz = "UTC"),
by = "day")

r
#> class : SpatRaster
#> dimensions : 10, 10, 365 (nrow, ncol, nlyr)
#> resolution : 36, 18 (x, y)
#> extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84
#> time : 2001-01-01 to 2001-12-31 UTC

time(r) |> class()
#> [1] "POSIXct" "POSIXt"

r["2001"]
#> Error: [subset] no (valid) layer selected


time(r) <- as.Date("2002-01-01") + 0:364

r
#> class : SpatRaster
#> dimensions : 10, 10, 365 (nrow, ncol, nlyr)
#> resolution : 36, 18 (x, y)
#> extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84
#> time (days) : 2002-01-01 to 2002-12-31

time(r) |> class()
#> [1] "Date"

r["2002"]
#> Error: [subset] no (valid) layer selected

我查看了 ?time 以及 rspatial.org 上的文档但无法找到与索引相关的相关文档。

我在这里错过了什么?

最佳答案

您将层名称(可能看起来像时间戳)与实际时间戳混淆了。

这是使用时间戳的方法(这里使用 Date,因为它不那么冗长)

library(terra)
r <- rast(ncols = 10, nrows = 10, nlyr = 365)
time(r) <- as.Date("2001-01-01") + 0:364
head(names(r))
# "lyr.1" "lyr.2" "lyr.3" "lyr.4" "lyr.5" "lyr.6"

您可以像这样按名称子集图层

r[["lyr.1"]] 

请注意子设置层的双括号,尽管在使用名称而不是数字索引时可以使用单括号。

要按时间子集,你可以这样做

r[[time(r) == as.Date("2001-06-01")]]
#class : SpatRaster
#dimensions : 10, 10, 1 (nrow, ncol, nlyr)
#resolution : 36, 18 (x, y)
#extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84
#time (days) : 2001-06-01

有了日期,你甚至不需要使用“as.Date”

r[[time(r) >= "2001-12-01"]]
#class : SpatRaster
#dimensions : 10, 10, 31 (nrow, ncol, nlyr)
#resolution : 36, 18 (x, y)
#extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84
#time (days) : 2001-12-01 to 2001-12-31

关于r - 如何按时间索引 SpatRaster 对象中的各个图层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73259623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com