为什么r中有重复的栅格数据

Why are there repeated raster data in r

my_raster.tiff文件为2013年中国PM2.5浓度

我已将数据 (my_raster.tiff) 上传到 Github (https://github.com/lizhiwei1994/example_data/blob/main/my_raster.tiff) 以重现代码。

我想提取特定经纬度的PM2.5浓度。

我在网上找到了下面的代码。 可批量提取特定经纬度的PM2.5浓度。为简单起见,我只处理了一张 TIFF 图像 (my_raster.tiff)。

代码运行良好。但是在输出的 CSV 文件中,我的结果重复了 12 次。我认为这段代码与它有关:result<-matrix(rep(0,12*n),ncol = n).

我想从网上下载的原代码设置为12是为了处理一张包含12层数据的TIFF图像。但是在我的数据中,my_raster.tiff只包含了一层数据(2013年的PM2.5浓度)。

所以我的问题是如果我的my_raster.tiff包含了从2013年到2024年总共12年的数据,结果会不会没有重复值?

# I think there might be something wrong with the code
result<-matrix(rep(0,12*n),ncol = n) #I think this is where the problem lies

下面是从网上下载的完整代码

install.packages(c("rgdal","raster"))

library(rgdal) 
library(raster)

name <- strsplit(getwd(),split="/")
number <- length(name[[1]]) 

csvname <- paste(as.character(name[[1]][number]),".csv",sep = '')

lst <- list.files(path=getwd(),pattern='tiff$',full.names = T) 

n <- length(lst) 
data<-data.frame(Lon = 116.3783, Lat = 39.86483) 

attach(data) 

coordinates(data)<-c("Lon","Lat") 

esult<-matrix(rep(0,12*n),ncol = n) #I think this is where the 
#problem lies

bio_number<-vector()

for(i in 1:length(lst)){
 
  filename <- strsplit(lst[[i]],split="/") 
  
  file<-filename[[1]][length(filename[[1]])]
  
  BIO <- raster(file) 
  
  BIO_centroid <- raster::extract(BIO, data, method='simple', buffer=1000, fun=mean, df=TRUE)   
  bio_number[i]<-strsplit(strsplit(lst[[i]],split="/")[[1]][number+1],split=".tif")[[1]]   
  result[,i]<-BIO_centroid[,2]
}

colnames(result)<-bio_number

看起来你把事情弄得比需要的复杂得多。这是使用 terraraster 的替代品)的一般工作流程。

#files <- list.files(path=getwd(),pattern='tiff$',full.names = T) 
files <- c("my_raster.tiff", "my_raster.tiff", "my_raster.tiff")

library(terra)
r <- rast(files)
pts <- data.frame(Lon = 116.3783, Lat = 39.86483) 
e <- extract(r, pts)
e
#  ID my_raster my_raster my_raster
#1  1  57.80168  57.80168  57.80168

在这种情况下,数字是相同的,因为我使用同一个文件三次,但是如果你使用 12 个不同的文件,你可以在每一行上得到 12 个不同的数字(每个点一行)。