在栅格上使用 cut() 指定标签

specifying labels using cut() on raster

假设我有以下光栅:

library(raster)    
r <- raster(ncols=36, nrows=18)
values(r) <- rnorm(ncell(r)) 

我可以使用 cut():

离散它的值
breaks <- -2:2 * 3
rc <- cut(r, breaks=breaks)

但是,当我尝试指定标签时,例如 A、B、C 等

rc <- cut(r, breaks=breaks, labels = c("A", "B", "C", "D", "E"))

它returns下面的错误。

Error in cut.default(getValues(x), breaks = breaks, labels = FALSE,
...) :    formal argument "labels" matched by multiple actual
arguments

我尝试用谷歌搜索错误消息,但没有成功。知道出了什么问题吗?

首先,你只有5个休息点,所以你只能有4个标签。其次,您可以对栅格数据而不是整个栅格对象使用 cut

rc <- r
rc[] <- cut(rc[], breaks = breaks, labels = c("A", "B","C","D"))
rc
#> class      : RasterLayer 
#> dimensions : 18, 36, 648  (nrow, ncol, ncell)
#> resolution : 10, 10  (x, y)
#> extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#> crs        : +proj=longlat +datum=WGS84 
#> source     : memory
#> names      : layer 
#> values     : 1, 4  (min, max)
#> attributes :
#>  ID VALUE
#>   1     A
#>   2     B
#>   3     C
#>   4     D

我就是这样做的,使用 terra:

library(terra)    
r <- rast(ncols=36, nrows=18)
values(r) <- rnorm(ncell(r)) 
breaks <- -2:2 * 3

rc <- classify(r, breaks)

levels(rc)
#[[1]]
#[1] "(-6–-3]" "(-3–0]"  "(0–3]"   "(3–6]"  

levels(rc) <- c("A", "B", "C", "D")

rc
#class       : SpatRaster 
#dimensions  : 18, 36, 1  (nrow, ncol, nlyr)
#resolution  : 10, 10  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +no_defs 
#source      : memory 
#name        : layer 
#min value   :     A 
#max value   :     D