Подмножество растрового кирпича по месяцам
Я купил себе растровый блок с именем y, который имеет 14 975 временных слоев, поскольку он получал значения среднесуточной высоты геопотенциала каждый день с 1.1.1979 по 31.12.2019 (14 975 дней). Кирпич имеет следующее описание:
class : RasterBrick
dimensions : 221, 121, 26741, 14975 (nrow, ncol, ncell, nlayers)
resolution : 0.25, 0.25 (x, y)
extent : 14.875, 45.125, 24.875, 80.125 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84
source : C:/Users/Adam/AppData/Local/Temp/RtmpaKZVdb/raster/r_tmp_2020-10-26_165849_53084_29346.grd
names : index_1979.01.01, index_1979.01.02, index_1979.01.03, index_1979.01.04, index_1979.01.05, index_1979.01.06, index_1979.01.07, index_1979.01.08, index_1979.01.09, index_1979.01.10, index_1979.01.11, index_1979.01.12, index_1979.01.13, index_1979.01.14, index_1979.01.15, ...
min values : 46604.85, 47328.07, 48944.12, 49320.65, 49244.67, 49516.16, 49504.01, 48959.65, 48608.90, 47603.10, 47572.72, 48564.15, 49816.92, 49078.65, 48321.72, ...
max values : 57006.81, 56968.60, 56958.67, 56976.26, 57288.55, 57535.62, 57659.48, 57581.33, 57381.65, 57052.99, 56803.95, 56854.89, 56783.50, 56739.44, 56600.52, ...
и я хотел бы разделить этот растровый блок на 12 растровых блоков по месяцам, чтобы у меня был 1 растровый блок на каждый календарный месяц. Я пытался сделать это несколькими способами, но ничего не вышло. Например, я попытался вычесть символ месяца из имен (y), и я думаю, что это определенно правильный путь, но он просто не работает. Каждая помощь приветствуется, спасибо!
2 ответа
Вы пытаетесь с этим:
layer_names <- names(y)
layer_names_2 <- gsub('index_', '', layer_names)
layer_names_3 <- gsub('\\.', '-', layer_names_2)
layer_names_3_as_date <- as.Date(layer_names_3)
library(lubridate)
layer_names_3_in_months <- month(layer_names_3_as_date)
# We filtered the layers of the month 'i'
i <- 1 # january
layer_names_3_in_months_i <- which(layer_names_3_in_months==i)
layer_month_i <- names(y)[layer_names_3_in_months_i]
# Filter done
y[[layer_month_i]]
# Pd: Try changed brick by stack in case of problems (y <- stack(y))
Если вы попробуете с этим:
# We changed the names of the layers to months:
layer_names_original <- names(y)
layer_names <- layer_names_original
layer_names_2 <- gsub('index_', '', layer_names)
layer_names_3 <- gsub('\\.', '-', layer_names_2)
layer_names_3_as_date <- as.Date(layer_names_3)
library(lubridate)
layer_names_3_in_months <- month(layer_names_3_as_date)
names(y) <- layer_names_3_in_months
# We filtered the layers of the month 'i'
i <- 1 # january
y_i <- y[[i]]
# We replaced the month names by the originals
id_match <- which(names(y)%in%i)
names(y_i) <- layer_names_original[id_match]
# Pd: Try changed brick by stack in case of problems (y <- stack(y))