通过时间将数据帧值循环到栅格中

Looping dataframe values into a raster through time

我有一个栅格 N 显示一个物种的总体分布。 存在物种的栅格像元值为 1,否则为 0。 我还有一个数据框 DF,显示同一物种随时间的相对生物量:

Biomass<-c(0.9, 1.2, 1.3)
Year<-c(1975, 1976, 1977)
DF<-c(Biomass, Year)

我想通过一个循环为我的时间序列的每一年创建(并保存)一个新的栅格,其中我所有最初等于 1 N[N==1] 的栅格单元被替换为在中找到的生物量值该特定年份的 DF。

例如,所有最初等于 1 的像元都将替换为 0.9,栅格将保存为 N-1975。

我的想法是创建一个循环,但我找不到任何关于将数据帧的值循环到栅格中的信息。

我想以每年一个光栅“N-1975”、“N-1976”结束... 谢谢!

您正在处理哪些空间信息?如果你有一个简单的 xy 坐标系,你可以使用 rasterfromXYZ(df) 为你的数据框的每一列提供一个栅格层,只要你的前两列分别是 x 和 y 坐标。如果您使用其他投影,则可以在函数中指定它:(https://rdrr.io/cran/raster/man/rasterFromXYZ.html)

#make som random data
x<-c(1,4,3,2,4)
y<-c(4,3,1,1,4)

#best to avoid only numbers as col names
X1975<- rnorm(5, 4,1)
X1976<- rnorm(5,5,1)

#make df
df<- cbind(x,y,X1975,X1976)

#make raster
biomass_raster <- rasterFromXYZ(df)


biomass_raster

#returns
class      : RasterBrick 
dimensions : 4, 4, 16, 2  (nrow, ncol, ncell, nlayers)
resolution : 1, 1  (x, y)
extent     : 0.5, 4.5, 0.5, 4.5  (xmin, xmax, ymin, ymax)
crs        : NA 
source     : memory
names      :    X1975,    X1976 
min values : 1.290337, 4.523350 
max values : 4.413451, 6.512719 



#plot all layers: plot(biomass_raster)
#access specific layer by calling biomass_raster$X1975 

我最终找到了解决这个问题的方法,所以我会 post 在这里以防有人遇到同样的问题:)

N_loop <- N
years <- 1975:2020

for(i in seq(length(years))){
  N_loop[N == 1] <- DF$Biomass[i]
  writeRaster(N_loop, paste0("N", years[i], ".asc"), overwrite = TRUE)
}