为什么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
看起来你把事情弄得比需要的复杂得多。这是使用 terra
(raster
的替代品)的一般工作流程。
#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 个不同的数字(每个点一行)。
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
看起来你把事情弄得比需要的复杂得多。这是使用 terra
(raster
的替代品)的一般工作流程。
#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 个不同的数字(每个点一行)。