Я знаю два разных возможных решения вашей проблемы.Один из них основан на получении среднего значения для каждого файла .nc, а затем - среднем весе этого значения, другой - на получении действительно большого массива и среднего значения с использованием этого массива.
Каждый .nc, который вы прочитаете, даст вам и массив, массив1, массив2 и так далее.Также для каждого массива у вас будет временной ряд, связанный с одним измерением массива.Это означает, что time_serie1 имеет все разное время в формате POSIXct для array1.Итак, сначала вы должны встроить этот вектор.Один у вас есть, что вы можете получить векторный индекс времени, которое вы хотите использовать для среднего.Для этого я бы использовал пакет lubridate, но это не обязательно.
index1 <- month(time_serie1) < 10 & month(time_serie1) > 3 # this make an index from april to septembre
index1 <- index1 & hour(time_serie1) <= 19 & hour(time_serie1) >= 8 # then you add the hour restriction
mean1 <- apply(array1[,,index1],1:2,mean)
Этот код даст вам двумерный массив со средним значением за первый год, вы можете поместить свои массивы и time_series в список и зациклить его,Тогда вы будете иметь для каждого года двумерный массив среднего значения за этот год, и вы можете усреднить эти массивы.Часть среднего веса, которую я сказал, состоит в том, что если вы сделаете это, и в среднем вы включите февраль, то ваши средства будут потрачены на разное количество дней, для вашего примера это не обязательно, но если вы используете февраль, то вынужно взвесить количество данных, используемых для каждого среднего значения.
Для этого решения почти то же самое, что и для другого, но мне оно нравитсяБольше.Вы можете объединить все свои массивы в большой массив, выполняя это по порядку, чтобы индекс времени находился в возрастающем порядке, я назову этот массив BigArray.Затем объедините временные ряды, связанные с каждым массивом, я назову его BigTime.И ищите индексы, которые вы хотите усреднить, и все готово.Большим преимуществом является то, что вам не нужно делать цикл с данными в списке, и вам не нужно заботиться об изменении размера февраля.
Index <- month(BigTime) < 10 & month(BigTime) > 3 # this make an index from april to septembre
Index <- Index & hour(BigTime) <= 19 & hour(BigTime) >= 8 # then you add the hour restriction
Mean <- apply(BigArray[,,Index],1:2,mean)
И тогда это делаетсясреднее значение для ваших значений.
В обоих возможных вариантах строится двухмерный массив, если вам нужен трехмерный массив с одним измерением (временем), имеющий только одно значение, то добавьте это измерение.И если вы хотите получить дополнительную информацию, то для получения информации о среднем значении времени обычно называйте составную технику в науке о метеорологии.
Я надеюсь, что это решит вашу проблему.