从raster.list中提取纵向像素值,保存到数据框

Extract longitudinal pixel values from raster.list, save to data frame

我有一个多年来同一位置的栅格列表。像素值随时间的变化代表了像素的时间序列。 为了进一步分析,我需要提取每个像素随时间变化的值,并将其存储在数据框中,其中 row = #pixel, column = year

虚拟数据:

library(raster)

# create raster data from scratch
# create empty raster
y1<-raster(ncol = 3, nrow = 3)

values(y1)<-1:9

projection(y1)<-CRS("+init=epsg:4326")

# create and diversify the rasters
y2<-y1+10
y3<-y1+20
y4<-y1+30

# make list of rasters
y.list<-list(y1, y2,y3,y4)

# plot all rasters at once
par(mfrow = c(2,2))

for(i in 1:length(y.list)) {
  plot(y.list[[i]])
}

数据框应该是什么样子:


         y1  y2  y3  y4
pixel1   1   10  20  30
pixel2
...
pixel9   9   19  29  39

如何随时间提取唯一像素值,并将单个像素数据转换为数据帧?

我在这里找到了一个很好的答案! How to extract values from rasterstack with xy coordinates?

无需将栅格放入栅格列表 - 只需创建栅格堆栈!!

然后,只需简单地使用 raster::extract 创建每个像素值随时间变化的时间序列!

整个脚本:

library(raster)

# create raster data from scratch
# create empty raster
y1<-raster(ncol = 3, nrow = 3)

values(y1)<-1:9

projection(y1)<-CRS("+init=epsg:4326")

# recreate and diversify the rasters
y2<-y1+10
y3<-y1+20
y4<-y1+30

# create raster stack
# create raster stack
s<-stack(y1, y2, y3, y4)

# plot rasters
plot(s)

# extract raster values - return a matrix of values in each pixel
# row = pixel, column = layer (year)
mat <- raster::extract( s , 1:ncell(s) )

tadaaaa !!!!

> mat
  layer.1 layer.2 layer.3 layer.4
 [1,]       1      11      21      31
 [2,]       2      12      22      32
 [3,]       3      13      23      33
 [4,]       4      14      24      34
 [5,]       5      15      25      35
 [6,]       6      16      26      36
 [7,]       7      17      27      37
 [8,]       8      18      28      38
 [9,]       9      19      29      39