通过时间将数据帧值循环到栅格中
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)
}
我有一个栅格 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)
}