从栅格中提取“名称 - 值”而不是由R指定的“ID级别”

时间:2017-02-09 14:19:09

标签: r unique raster

我在R中有以下栅格:

> veg
class       : RasterLayer 
dimensions  : 22142, 18123, 401279466  (nrow, ncol, ncell)
resolution  : 28.5, 28.5  (x, y)
extent      : 329232, 845737.5, 8487420, 9118467  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=20 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 
data source : C:\Users\Desktop\RO SICAR\ibge_raster 
names       : ibge_raster 
values      : 1, 39  (min, max)
attributes  :
       ID COUNT                               NM_UVEG
 from:  1   953  Contato Savana / Floresta Estacional
 to  : 39 57506 Savana Parque sem floresta-de-galeria

我对光栅包不是很熟悉,但我试图得到与R分配给这些名称的因子水平(“ID”)相关的名称列表(“NM_VEG”)。我试过了:

unique(values(veg))

但是R返回级别“ID”而不是“NM_UVEG”中的名称:

> unique(values(veg))
 [1] NA  5  8  4 14 34  2 13 12 28 36 26 11 25 10 16 17 33 38  3
[21] 15  9 23 29 27 32 22 31 37  6 39 35  7  1 20 24 30 19 18 21

我确信我错过了一些基本命令,但我无法弄清楚,有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

levels(veg)[[1]]是您正在寻找的咒语。

为了表明这是有效的,这里(from here)是一些适当的可重复数据......

library(raster)

## Example data
r <- raster(ncol=4, nrow=2)
r[] <- sample(1:4, size=ncell(r), replace=TRUE)
r <- as.factor(r)

## Add a landcover column to the Raster Attribute Table
rat <- levels(r)[[1]]
rat[["landcover"]] <- c("land","ocean/lake", "rivers","water bodies")
levels(r) <- rat

...这里是一个提取data.frame的调用,它提供与每个级别相关的属性:

levels(r)[[1]]
#   ID    landcover
# 1  1         land
# 2  2   ocean/lake
# 3  3       rivers
# 4  4 water bodies