Tenho uma grande pilha raster que é um monte de grupos empilhados juntos. A única coisa que diferencia os grupos é o nome da camada, que começa consistentemente com o mesmo prefixo. Gostaria de separar esses grupos em pilhas separadas, com base no nome da camada. Sei que posso usar subset()
para extrair um conjunto específico de camadas, com base no número da camada ou no nome , mas isso exige que eu identifique manualmente cada grupo separadamente. Existe alguma maneira de fazer isso usando um índice, talvez de forma semelhante a como você pode usar um índice para agrupar em terra::tapp()
?
library(terra)
#create sample data
s1 <- rast(nrow=4, ncol=3, nlyrs=5)
values(s1) <- runif(ncell(s1) * dim(s1)[3])
names(s1) <- c('m1', 'm2', 'm3', 'm4', 'm5')
s2 <- rast(nrow=4, ncol=3, nlyrs=5)
values(s2) <- runif(ncell(s2) * dim(s2)[3])
names(s2) <- c('n1', 'n2', 'n3', 'n4', 'n5')
s <- c(s1, s2)
#create index of the different layers - can I use this to separate the groups?
lyr_names <- names(s)
idx <- substr(lyr_names, 1, 1)
#manual subset by position
m <- subset(s, 1:5)
n <- subset(s, 6:10)
#manual subset by names
names_m <- lyr_names[grep("m.*", lyr_names)]
names_n <- lyr_names[grep("n.*", lyr_names)]
m <- subset(s, names_m[names_m %in% names(s)])
n <- subset(s, names_n[names_n %in% names(s)])