从多边形子集中提取栅格内值的百分比分布
Extracting percentage distribution of values within a raster, from a polygon subset
我有一个栅格和 sf
多边形,如下所示:
library(raster)
libary(sf)
# Create raster r
r = raster(ncol=1000, nrow=1000, xmn=0, xmx=1000, ymn=0, ymx=1000)
values(r) = round(runif(ncell(r),1,10))
# Create sf polygon
poly_sf = st_sfc(st_polygon(list(cbind(c(0,10,50,100,0),c(0,70,300,500,0)))))
栅格包含值介于 1 和 10 之间的单元格。我希望能够生成一个数据框,其中包含每个值的总单元格的总体百分比,在多边形生成的栅格单元格子集中 poly_sf
。我看过 exactextractr
,但还没有弄清楚如何使用该包实现我想要的。
您可以使用 raster
包中的 mask
函数,但您需要将多边形转换为 sf
对象:
library(raster)
library(sf)
# Create raster r
r = raster(ncol=1000, nrow=1000, xmn=0, xmx=1000, ymn=0, ymx=1000)
values(r) = round(runif(ncell(r),1,10))
# Create sf polygon
poly_sf = st_sfc(st_polygon(list(cbind(c(0,10,50,100,0),c(0,70,300,500,0)))))
p2 <- st_as_sf(poly_sf)
# Plot the raster object:
plot(r)
您可以使用 mask
函数创建遮罩:
plot(mask(r, p2))
因此,要从此蒙版对象中提取值,您可以使用 mask
函数并使用 table
:
计算每个值的比例
# Subset the polyfon from the SF object:
subset_ra <- mask(r, p2)
# Calculate the porportion of each value
df <- as.data.frame(table(as.matrix(subset_ra)))
df$Percent <- df$Freq / sum(df$Freq) * 100
Var1 Freq Percent
1 1 154 5.517736
2 2 329 11.787890
3 3 287 10.283053
4 4 290 10.390541
5 5 325 11.644572
6 6 305 10.927983
7 7 319 11.429595
8 8 312 11.178789
9 9 315 11.286277
10 10 155 5.553565
它能回答您的问题吗?
我有一个栅格和 sf
多边形,如下所示:
library(raster)
libary(sf)
# Create raster r
r = raster(ncol=1000, nrow=1000, xmn=0, xmx=1000, ymn=0, ymx=1000)
values(r) = round(runif(ncell(r),1,10))
# Create sf polygon
poly_sf = st_sfc(st_polygon(list(cbind(c(0,10,50,100,0),c(0,70,300,500,0)))))
栅格包含值介于 1 和 10 之间的单元格。我希望能够生成一个数据框,其中包含每个值的总单元格的总体百分比,在多边形生成的栅格单元格子集中 poly_sf
。我看过 exactextractr
,但还没有弄清楚如何使用该包实现我想要的。
您可以使用 raster
包中的 mask
函数,但您需要将多边形转换为 sf
对象:
library(raster)
library(sf)
# Create raster r
r = raster(ncol=1000, nrow=1000, xmn=0, xmx=1000, ymn=0, ymx=1000)
values(r) = round(runif(ncell(r),1,10))
# Create sf polygon
poly_sf = st_sfc(st_polygon(list(cbind(c(0,10,50,100,0),c(0,70,300,500,0)))))
p2 <- st_as_sf(poly_sf)
# Plot the raster object:
plot(r)
您可以使用 mask
函数创建遮罩:
plot(mask(r, p2))
因此,要从此蒙版对象中提取值,您可以使用 mask
函数并使用 table
:
# Subset the polyfon from the SF object:
subset_ra <- mask(r, p2)
# Calculate the porportion of each value
df <- as.data.frame(table(as.matrix(subset_ra)))
df$Percent <- df$Freq / sum(df$Freq) * 100
Var1 Freq Percent
1 1 154 5.517736
2 2 329 11.787890
3 3 287 10.283053
4 4 290 10.390541
5 5 325 11.644572
6 6 305 10.927983
7 7 319 11.429595
8 8 312 11.178789
9 9 315 11.286277
10 10 155 5.553565
它能回答您的问题吗?