Подмножество растрового кирпича по месяцам

Я купил себе растровый блок с именем 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))
Другие вопросы по тегам