是否可以在 R 中创建一个星星对象,它是其他两个星星对象的最小值?

Is it possible to create a stars object in R that is the minimum values of two other stars objects?

我有两个星星对象被读入 R 作为 tifs:

tif1 <- stars::read_stars("/data.tif")
tif2 <- stars::read_stars("/data2.tif")

它们覆盖的范围相同,分辨率相同。我知道我可以用对象做代数——例如,要创建一个新对象,它是前两个值的平均值,我可以使用:

tif.avg <- (tif1 + tif2)/2

但是,我想知道是否可以创建一个新对象来从它们中提取最小值。我已经尝试了几种不同的方法,但是我遇到了麻烦。有人知道这是否可能吗?

O.K。感谢@Ben Lee 的澄清。 因此,作为您的评论的后续行动,请在下面(参见 Reprex)找到您的问题的一种解决方案:

REPREX:

library(raster)
#> Le chargement a nécessité le package : sp
library(stars)
#> Le chargement a nécessité le package : abind
#> Le chargement a nécessité le package : sf
#> Linking to GEOS 3.9.1, GDAL 3.2.1, PROJ 7.2.1


# 1. Creating two stars objects
r1 <- raster(ncols = 3, nrows = 3)
values(r1) <- seq(length(r1))

r2 <- raster(ncols = 3, nrows = 3)
values(r2) <- rev(seq(length(r2)))

r_stack <- stack(r1, r2)
writeRaster(r_stack, "raster.tif", 
            bylayer = TRUE, suffix = 1:nlayers(r_stack))

tif1 <- read_stars("raster_1.tif")
tif2 <- read_stars("raster_2.tif")

# Array of the first stars object
tif1[[1]]
#>      [,1] [,2] [,3]
#> [1,]    1    4    7
#> [2,]    2    5    8
#> [3,]    3    6    9

# Array of the second stars object
tif2[[1]]
#>      [,1] [,2] [,3]
#> [1,]    9    6    3
#> [2,]    8    5    2
#> [3,]    7    4    1



# 2. Creating a 'stars' object with the minimum values
# of the two previous stars objects

# 2.1. retrieving the min values between the two stars object 
tif_min <- pmin(tif1[[1]], tif2[[1]])

# 2.2. converting the resulting array 'tif_min' into a stars object
tif_min <- st_as_stars(tif_min)

# 2.3. retrieving the dimensions from one of the two previous
# stars object (here, tif1) and setting a name
st_dimensions(tif_min) <- st_dimensions(tif1)
setNames(tif_min, "tif_min")

#> stars object with 2 dimensions and 1 attribute
#> attribute(s):
#>          Min. 1st Qu. Median     Mean 3rd Qu. Max.
#> tif_min     1       2      3 2.777778       4    5
#> dimension(s):
#>   from to offset delta refsys point values x/y
#> x    1  3   -180   120 WGS 84 FALSE   NULL [x]
#> y    1  3     90   -60 WGS 84 FALSE   NULL [y]

# 2.4 a little check!
tif_min[[1]]
#>      [,1] [,2] [,3]
#> [1,]    1    4    3
#> [2,]    2    5    2
#> [3,]    3    4    1
#>These are the minimum values of the two "star" input objects

reprex package (v2.0.1)

于 2021-09-20 创建

请确认这就是您要查找的内容(如果是,请不要忘记验证答案,以便其他用户更容易找到此解决方案)