我有一个从 USDA 获取的作物覆盖率 SpatRaster 对象。该栅格有五个类别:RED、GREEN、BLUE、CLASS_NAME 和 OPACITY。我正在尝试在 CLASS_NAME 中对特定作物(例如“玉米”)进行子集化。但是,我却没能做到。
我在下面包含了原始 SpatRaster 的输出。
> usda
class : SpatRaster
dimensions : 15133, 24345, 1 (nrow, ncol, nlyr)
resolution : 30, 30 (x, y)
extent : 1204695, 1935045, 1829055, 2283045 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=aea +lat_0=23 +lon_0=-96 +lat_1=29.5 +lat_2=45.5 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs
source : CDL_2023_clip_20240401121659_1498934739.tif
color table : 1
categories : RED, GREEN, BLUE, CLASS_NAME, OPACITY
name : RED
min value : NA
max value : NA
我尝试使用 terra:subset 函数对数据进行子集化,该函数我过去曾与其他 SpatRaster 和 SpatVector 对象一起使用过。但我认为我正在努力解决这个结构。
我尝试过:
usda_sub <- subset(usda, "RED")
但这会产生与上面相同的输出。我只是复制原始的 usda SpatRaster 对象。
我也尝试过:
> usda_sub <- subset(usda, "CLASS_NAME")
Error: [subset] invalid name(s)
和
> usda_sub <- subset(usda, "Corn")
Error: [subset] invalid name(s)
我了解如何对 SpatRaster 对象的“名称”元素进行子集化,但显然我不知道如何在类别内进行子集化。例如,在 CLASS_NAME 类别中设置“CORN”或“CRANBERRIES”的子集。这个问题可能有一个非常简单的解决方案,但我只是看不到。
terra::subset(usda, usda$CLASS_NAME %in% c("Corn", "CRANBERRIES")