我已经通过terra:::extract
从一个tif文件中提取数据,在shapefile中使用多边形。
library(terra)
tif = rast('data/snow.tif')
shape = vect('data/canada_provinces.shp')
x = extract(tif, shape, na.rm = T)
head(x)
ID values
1 100
1 100
1 100
1 101
1 101
2 150
2 150
2 150
...
90 101
90 101
90 101
我想添加shapefile列state
,所以我得到以下内容:
x = extract(tif, shape, na.rm = T, layer = 'states')
ID values states
1 100 AK
1 100 AK
1 100 AK
1 101 AK
1 101 AK
2 150 NT
2 150 NT
2 150 NT
...
90 101 BC
90 101 BC
90 101 BC
但是在terra:::extract
中使用layer
特性是行不通的。
我如何将实际状态添加到从提取函数创建的数据帧?
也许你忽略了需要总结每个多边形的值。
示例数据
library(terra)
v <- vect(system.file("ex/lux.shp", package="terra"))[,c("ID_2", "NAME_2")]
r <- rast(system.file("ex/elev.tif", package="terra"))
方法1
vv <- extract(r, v, fun=mean, na.rm=TRUE, bind=TRUE)
方法2
vv$elev <- extract(r, v, fun=mean, na.rm=TRUE, ID=FALSE)[,1]
vv
# class : SpatVector
# geometry : polygons
# dimensions : 12, 4 (geometries, attributes)
# extent : 5.74414, 6.528252, 49.44781, 50.18162 (xmin, xmax, ymin, ymax)
# source : lux.shp
# coord. ref. : lon/lat WGS 84 (EPSG:4326)
# names : ID_2 NAME_2 elevation elev
# type : <num> <chr> <num> <num>
# values : 1 Clervaux 467.1 467.1
# 2 Diekirch 333.9 333.9
# 3 Redange 377.4 377.4
方法3
e <- extract(r, v, fun=mean, na.rm=TRUE)
ve <- cbind(v, e)
#Or
values(v) <- e