如何将栅格堆栈的值提取到单独的列中?
How to extract values of a raster stack into separate columns?
我有不同植被测量值的栅格(即冠层高度、植物密度)。我想堆叠图层并使用 dplyr
提取值并分配给不同的列。我怎样才能做到这一点?下面的示例代码。很抱歉没有可重现的例子。
而不是这个:
RSF_df.sf <- RSF_df.sf %>%
mutate(can_cover5m = raster::extract(can_cover5m, RSF_df.sf),
veg_density1mheight_5m = raster::extract(veg_density1mheight_5m, RSF_df.sf),
veg_density2mheight_5m = raster::extract(veg_density2mheight_5m, RSF_df.sf),
veg_density3mheight_5m = raster::extract(veg_density3mheight_5m, RSF_df.sf),
veg_density4mheight_5m = raster::extract(veg_density4mheight_5m, RSF_df.sf),
veg_density5mheight_5m = raster::extract(veg_density5mheight_5m, RSF_df.sf),
veg_density_over5mheight_5m = raster::extract(veg_density_over5mheight_5m, RSF_df.sf))
summary(RSF_df.sf)
我想要这个,但是每个蔬菜都要。在单独的列中测量:
all_land_data<-addLayer(can_cover5m,veg_density1mheight_5m,veg_density2mheight_5m,veg_density3mheight_5m,
veg_density4mheight_5m,veg_density5mheight_5m,veg_density_over5mheight_5m)
del <- RSF_df.sf %>%
mutate(all_land_data = raster::extract(raster stack, RSF_df.sf)) #I need values for each veg. measurment in seperate columns
summary(del)
除非我误解了,否则我认为你把它弄得比必要的更复杂了。如果您使用 terra
包,并一起读取所有栅格,则会创建一个 SpatRaster 堆栈。然后,使用 terra::extract
为 terra::vect
对象中的每个要素提取值将生成一个 data.frame,其中包含堆栈中每个栅格图层的列。
即
library(terra)
veg_stk <- c(rast(veg_density1mheight_5m), rast(veg_density2mheight_5m), rast(veg_density3mheight_5m), rast(can_cover5m)
RSF_vect <- vect(RSF_df.sf)
del <- terra::extract(veg_stk, RSF_vect, fun = mean) # returns a DF
我有不同植被测量值的栅格(即冠层高度、植物密度)。我想堆叠图层并使用 dplyr
提取值并分配给不同的列。我怎样才能做到这一点?下面的示例代码。很抱歉没有可重现的例子。
而不是这个:
RSF_df.sf <- RSF_df.sf %>%
mutate(can_cover5m = raster::extract(can_cover5m, RSF_df.sf),
veg_density1mheight_5m = raster::extract(veg_density1mheight_5m, RSF_df.sf),
veg_density2mheight_5m = raster::extract(veg_density2mheight_5m, RSF_df.sf),
veg_density3mheight_5m = raster::extract(veg_density3mheight_5m, RSF_df.sf),
veg_density4mheight_5m = raster::extract(veg_density4mheight_5m, RSF_df.sf),
veg_density5mheight_5m = raster::extract(veg_density5mheight_5m, RSF_df.sf),
veg_density_over5mheight_5m = raster::extract(veg_density_over5mheight_5m, RSF_df.sf))
summary(RSF_df.sf)
我想要这个,但是每个蔬菜都要。在单独的列中测量:
all_land_data<-addLayer(can_cover5m,veg_density1mheight_5m,veg_density2mheight_5m,veg_density3mheight_5m,
veg_density4mheight_5m,veg_density5mheight_5m,veg_density_over5mheight_5m)
del <- RSF_df.sf %>%
mutate(all_land_data = raster::extract(raster stack, RSF_df.sf)) #I need values for each veg. measurment in seperate columns
summary(del)
除非我误解了,否则我认为你把它弄得比必要的更复杂了。如果您使用 terra
包,并一起读取所有栅格,则会创建一个 SpatRaster 堆栈。然后,使用 terra::extract
为 terra::vect
对象中的每个要素提取值将生成一个 data.frame,其中包含堆栈中每个栅格图层的列。
即
library(terra)
veg_stk <- c(rast(veg_density1mheight_5m), rast(veg_density2mheight_5m), rast(veg_density3mheight_5m), rast(can_cover5m)
RSF_vect <- vect(RSF_df.sf)
del <- terra::extract(veg_stk, RSF_vect, fun = mean) # returns a DF