I am trying to Calculate the percent of each grid square that is developed in 2011 and 2021 by a fishnet. after I call in the rasters and project to the proper crs I keep running into issues with extracting by fishnet. here are the steps
fishnet <- st_make_grid(atl_msa,2500) %>%
st_sf() %>%
st_join(.,atl_msa,predicate='intersects',left=FALSE) %>%
mutate(ID=row_number()) %>%
select(ID)
ggplot()+
geom_sf(data=fishnet,color='grey50',fill='gray90',linewidth=0.1)+
geom_sf(data=atl_msa,fill='transparent',color='black',linewidth=0.5)+
theme_void()
Reclassify the land cover rasters into six categories: ‘Water’,’Developed’,’Forest’,’Farm’,’Wetlands’,’OtherUndeveloped’
land_cover_reclass_matrix = matrix(
c(11,0,
21,1,
22,1,
23,1,
24,1,
41,2,
42,2,
43,2,
81,3,
82,3,
90,4,
95,4,
52,5,
71,5,
31,5),
ncol=2,byrow = TRUE)
lc2011_class <- terra::classify(lc2011,land_cover_reclass_matrix)
levels(lc2011_class) <- c('Water','Developed','Forest','Farm','Wetlands','OtherUndeveloped')
lc2011_class_mask <- terra::mask(lc2011_class,atl_msa)
levels(lc2011_class_mask) <- c('Water','Developed','Forest','Farm','Wetlands','OtherUndeveloped')
lc2021_class <- terra::classify(lc2021,land_cover_reclass_matrix)
levels(lc2021_class) <- c('Water','Developed','Forest','Farm','Wetlands','OtherUndeveloped')
lc2021_class_mask <- terra::mask(lc2021_class,atl_msa)
levels(lc2021_class_mask) <- c('Water','Developed','Forest','Farm','Wetlands','OtherUndeveloped')
grid.arrange(ncol=2,
ggplot()+
geom_spatraster(data=lc2011_class_mask,na.rm=TRUE)+
geom_sf(data=atl_msa,fill='transparent',color='black',linewidth=0.5)+
scale_fill_manual(values=c('lightblue','pink','lightgreen','lightyellow','blue','orange'),na.value = "transparent",name='Land Cover')+
theme_void()+
ggtitle('Land Cover in 2011'),
ggplot()+
geom_spatraster(data=lc2021_class_mask,na.rm=TRUE)+
geom_sf(data=atl_msa,fill='transparent',color='black',linewidth=0.5)+
scale_fill_manual(values=c('lightblue','pink','lightgreen','lightyellow','blue','orange'),na.value = "transparent",name='Land Cover')+
theme_void()+
ggtitle('Land Cover in 2021')
)
then here is where I am having issues(see photo):
lc2011_extract <- terra::extract(lc2011_class,fishnet,fun=table) %>%
mutate(pct_developed = Developed / (Developed + Water + Forest + Farm + Wetlands + OtherUndeveloped) * 100)
This is the Error I keep getting “Error in mutate()
:
! Can’t transform a data frame with NA
or ""
names.
Backtrace:
- terra::extract(lc2011_class, fishnet, fun = table) %>% …
- dplyr:::mutate.data.frame(…)”
moochiemeng is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.