通过模拟提取缓冲区平均值 (RasterStack)
extract buffer mean by simulation (RasterStack)
我有两个文件:
- 一个名为 m_stack;
的 RasterStack(其中每一层代表 1 个空气质量指数模拟图)
- 一个名为 shph 的 SpatialPointsDataFrame(其中每个点代表一个居住地);
我想通过模拟提取每个居住地的平均空气质量指数。为了计算平均空气质量指数,我使用了一个小缓冲区(60 米)。
我正在设法提取每个居住地的平均空气质量指数。
但我想通过模拟为每个居住地取一个平均值。
接下来我会尝试举一个简单的例子:
# create 2 raster maps (as example of 2 air quality index simulations)
map_r1 = raster(ncol = 10, nrow = 10, xmn = 0, xmx = 100, ymn = 0, ymx = 100)
values(map_r1) = seq(1:ncell(map_r1))
map_r2 = raster(ncol = 10, nrow = 10, xmn = 0, xmx = 100, ymn = 0, ymx = 100)
values(map_r2) = 1:ncell(map_r2)*2
# create RasterStack adding both raster maps
map_stack<-stack(map_r1,map_r2)
# create SpatialPoint (as example of 3 places of residence)
x <- c(20,40,60)
y <- c(20,40,60)
v1 <- c(1.0, 2.0, 3.0)
map_p<-as.data.frame(cbind(x,y,v1))
coordinates(map_p) <- ~x + y
然后,为了提取每个居住地的平均值,我尝试了以下模拟:
# extract mean value (buffer=15 as example) for each point
buff<-extract(map_stack,map_p,buffer=15)
mean<-sapply(buff,mean)
结果只给我每个居住地的一个平均值(计算所有模拟的平均值)。我很乐意听取如何通过模拟提取每个住宅的平均空气质量指数的想法。亲切的问候,曼努埃尔
这是一个小例子,向您展示它是如何工作的(取自 ?extract)。
r <- raster(ncol=36, nrow=18)
r[] <- 1:ncell(r)
s <- stack(r, r*2, r^2)
xy <- cbind(-50, seq(-80, 80, by=20))
e <- extract(s, xy[2:3,], buffer=1000000)
e
#[[1]]
# layer.1 layer.2 layer.3
#[1,] 517 1034 267289
#[2,] 518 1036 268324
#[3,] 552 1104 304704
#[4,] 553 1106 305809
#[5,] 554 1108 306916
#[6,] 555 1110 308025
#
#[[2]]
# layer.1 layer.2 layer.3
#[1,] 445 890 198025
#[2,] 446 892 198916
#[3,] 481 962 231361
#[4,] 482 964 232324
如您所见,对于每个点,您都会得到一个包含每一层值的矩阵。您现在可以使用 sapply 来计算您想要的内容。如果你想要逐层平均。你可以做
sapply(e, colMeans)
[,1] [,2]
#layer.1 541.5 463.5
#layer.2 1083.0 927.0
#layer.3 293511.2 215156.5
我有两个文件:
- 一个名为 m_stack; 的 RasterStack(其中每一层代表 1 个空气质量指数模拟图)
- 一个名为 shph 的 SpatialPointsDataFrame(其中每个点代表一个居住地);
我想通过模拟提取每个居住地的平均空气质量指数。为了计算平均空气质量指数,我使用了一个小缓冲区(60 米)。
我正在设法提取每个居住地的平均空气质量指数。 但我想通过模拟为每个居住地取一个平均值。
接下来我会尝试举一个简单的例子:
# create 2 raster maps (as example of 2 air quality index simulations)
map_r1 = raster(ncol = 10, nrow = 10, xmn = 0, xmx = 100, ymn = 0, ymx = 100)
values(map_r1) = seq(1:ncell(map_r1))
map_r2 = raster(ncol = 10, nrow = 10, xmn = 0, xmx = 100, ymn = 0, ymx = 100)
values(map_r2) = 1:ncell(map_r2)*2
# create RasterStack adding both raster maps
map_stack<-stack(map_r1,map_r2)
# create SpatialPoint (as example of 3 places of residence)
x <- c(20,40,60)
y <- c(20,40,60)
v1 <- c(1.0, 2.0, 3.0)
map_p<-as.data.frame(cbind(x,y,v1))
coordinates(map_p) <- ~x + y
然后,为了提取每个居住地的平均值,我尝试了以下模拟:
# extract mean value (buffer=15 as example) for each point
buff<-extract(map_stack,map_p,buffer=15)
mean<-sapply(buff,mean)
结果只给我每个居住地的一个平均值(计算所有模拟的平均值)。我很乐意听取如何通过模拟提取每个住宅的平均空气质量指数的想法。亲切的问候,曼努埃尔
这是一个小例子,向您展示它是如何工作的(取自 ?extract)。
r <- raster(ncol=36, nrow=18)
r[] <- 1:ncell(r)
s <- stack(r, r*2, r^2)
xy <- cbind(-50, seq(-80, 80, by=20))
e <- extract(s, xy[2:3,], buffer=1000000)
e
#[[1]]
# layer.1 layer.2 layer.3
#[1,] 517 1034 267289
#[2,] 518 1036 268324
#[3,] 552 1104 304704
#[4,] 553 1106 305809
#[5,] 554 1108 306916
#[6,] 555 1110 308025
#
#[[2]]
# layer.1 layer.2 layer.3
#[1,] 445 890 198025
#[2,] 446 892 198916
#[3,] 481 962 231361
#[4,] 482 964 232324
如您所见,对于每个点,您都会得到一个包含每一层值的矩阵。您现在可以使用 sapply 来计算您想要的内容。如果你想要逐层平均。你可以做
sapply(e, colMeans)
[,1] [,2]
#layer.1 541.5 463.5
#layer.2 1083.0 927.0
#layer.3 293511.2 215156.5