gpt4 book ai didi

r - 星星包 : how to define additional dimensions based on an attribute (filename)?

转载 作者:行者123 更新时间:2023-12-04 15:11:08 26 4
gpt4 key购买 nike

我有一组光栅文件(在本例中是从 http://www.paleoclim.org/ 下载的),我正在使用 stars 包将它们读入 R。

library("tidyverse")
library("fs")
library("stars")

data_path <- "./paleoclim"
(data_files <- list.files(data_path, pattern = "*.tif"))
#> [1] "BA_v1_2_5m_bio_1_badia.tif"
#> [2] "BA_v1_2_5m_bio_10_badia.tif"
#> [3] "BA_v1_2_5m_bio_11_badia.tif"
#> [...]
#> [39] "EH_v1_2_5m_bio_1_badia.tif"
#> [40] "EH_v1_2_5m_bio_10_badia.tif"
#> [41] "EH_v1_2_5m_bio_11_badia.tif"
#> [...]
#> [58] "HS1_v1_2_5m_bio_1_badia.tif"
#> [59] "HS1_v1_2_5m_bio_10_badia.tif"
#> [60] "HS1_v1_2_5m_bio_11_badia.tif"
#> [...]

(paleoclim <- read_stars(path(data_path, data_files)))
#> stars object with 2 dimensions and 133 attributes
#> attribute(s):
#> BA_v1_2_5m_bio_1_badia.tif BA_v1_2_5m_bio_10_badia.tif
#> Min. :101.0 Min. :213.0
#> 1st Qu.:166.0 1st Qu.:278.0
#> Median :173.0 Median :298.0
#> Mean :171.8 Mean :290.3
#> 3rd Qu.:180.0 3rd Qu.:304.0
#> Max. :200.0 Max. :325.0
#> [...]
#> dimension(s):
#> from to offset delta refsys point values
#> x 1 72 36 0.0416667 WGS 84 FALSE NULL [x]
#> y 1 48 33 -0.0416667 WGS 84 FALSE NULL [y]
创建于 2020-12-07 由 reprex package (v0.3.0)
文件名包含两条信息,我想将它们表示为星星对象的尺寸,例如 HS1 _v1_2_5m_ bio_1 _badia.tif 指的是时期“HS1”和生物气候变量“bio_1”。
我已经使用 st_redimension()创建新的维度和级别:
periods <- str_extract(names(paleoclim), "[^_]+")
biovars <- str_extract(names(paleoclim), "bio_[0-9]+")

paleoclim %>%
merge() %>%
st_redimension(
new_dims = st_dimensions(x = 1:72, y = 1:48,
period = unique(periods),
biovar = unique(biovars))
)
#> stars object with 4 dimensions and 1 attribute
#> attribute(s):
#> X
#> Min. : -91.0
#> 1st Qu.: 26.0
#> Median : 78.0
#> Mean : 588.2
#> 3rd Qu.: 256.0
#> Max. :11275.0
#> dimension(s):
#> from to offset delta refsys point values
#> x 1 72 1 1 NA FALSE NULL [x]
#> y 1 48 1 1 NA FALSE NULL [y]
#> period 1 7 NA NA NA FALSE BA,...,YDS
#> biovar 1 19 NA NA NA FALSE bio_1,...,bio_9
但这实际上并没有将属性(文件名)的值映射到新维度的级别。此外,关于原始 x 的大部分信息(例如 CRS)和 y尺寸丢失了,因为我必须手动重新创建它们。
您如何根据另一个维度或属性正确定义星星对象的新维度?

最佳答案

没有看到将所有文件读入三维后将一维一分为二的简单方法stars目的。您可以使用的另一种方法是:

  • 一次读取一个文件夹,该文件夹中的所有文件都进入variable第三维,单独存储 stars list 中的对象,
  • 然后合并生成的 stars对象,其中 stars对象进入 period第四维。

  • 在这个例子中,我下载了以下两个产品并解压到两个单独的文件夹中:
  • http://sdmtoolbox.org/paleoclim.org/data/BA/BA_v1_10m.zip
  • http://sdmtoolbox.org/paleoclim.org/data/HS1/HS1_v1_10m.zip

  • 这是代码:
    library(stars)

    # Directories with GeoTIFF files
    paths = c(
    "/home/michael/Downloads/BA_v1_10m",
    "/home/michael/Downloads/HS1_v1_10m"
    )

    # Read the files and set 3rd dimension
    r = list()
    for(i in paths) {
    files = list.files(path = i, pattern = "\\.tif$", full.names = TRUE)
    r[[i]] = read_stars(files)
    names(r[[i]]) = basename(files)
    r[[i]] = st_redimension(r[[i]])
    }

    # Combine the list
    r = do.call(c, r)

    # Attributes to 4th dimension
    names(r) = basename(paths)
    r = st_redimension(r)

    # Clean dimension names
    r = st_set_dimensions(r, names = c("x", "y", "variable", "period"))
    r
    和结果的打印输出:
    ## stars object with 4 dimensions and 1 attribute
    ## attribute(s), summary of first 1e+05 cells:
    ## BA_v1_10m.HS1_v1_10m
    ## Min. :-344.0
    ## 1st Qu.:-290.0
    ## Median :-274.0
    ## Mean :-264.8
    ## 3rd Qu.:-252.0
    ## Max. :-128.0
    ## NA's :94073
    ## dimension(s):
    ## from to offset delta refsys point values x/y
    ## x 1 2160 -180 0.166667 WGS 84 FALSE NULL [x]
    ## y 1 1072 88.6667 -0.166667 WGS 84 FALSE NULL [y]
    ## variable 1 19 NA NA NA NA bio_1.tif,...,bio_9.tif
    ## period 1 2 NA NA NA NA BA_v1_10m , HS1_v1_10m
    结果是 stars四个维度的对象,包括 x , y , variable , 和 period .
    以下是 period 中两个级别中的每一个的图尺寸:
    plot(r[,,,,1,drop=TRUE])
    plot1
    plot(r[,,,,2,drop=TRUE])
    plot2

    关于r - 星星包 : how to define additional dimensions based on an attribute (filename)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65183306/

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