Как объединить агрегат за месяц и разбить набор данных на определенную дату

Я пытаюсь создать среднемесячное значение осадков для двух разных наборов времени, но не могу разделить данные на две части перед агрегированием.

У меня есть набор данных о ежедневных осадках с 01-01-2006 по 31-12-2099, и я хочу агрегировать за месяц за период времени с (01-01-2015 по 31-12-2054) и (01-01 -2055 до 31-12-2099).

Я использовал агрегатную функцию, чтобы создать среднее значение за месяц, подобное этому. Но теперь у меня есть среднее значение за месяц по всему набору данных (2006-2100), и я хочу иметь два списка (один с 01-01-2015 по 31-12-2054 и один с 01-01-2055 по 31- 12-2099). Я думаю, что мне нужно создать подмножество или разделить данные, но я не могу найти, как совместить это с агрегатной функцией. Большое спасибо!

months = Alentejo_RCP4.5_Average$Month
Alentejo_RCP4.5_Average.myma = aggregate(x = Alentejo_RCP4.5_Average, 
                            by = list(months), FUN = mean)

Я также пробовал это, но он просто берет даты, а не прикрепленные значения к дате.

df <- data.frame(date=as.Date("2015-01-01")+1:365, x=1:365)
list <- split(df,df$date<as.Date("2055-01-01"))

zz <- " Year Month Day Date Average_P
2006     1   1 2006-01-01   6.5
2007     1   2 2007-01-02   2.8
2055     3   3 2055-03-03   3.5
2058     3   4 2058-03-04   5.1
2060     5   5 2060-05-05   3.2"

Data <- read.table(text=zz, header = TRUE)
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
182
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо разделения наборов данных вы можете создать новый столбец, чтобы различать две группы и взять mean для каждой группы и каждого месяца.

Data %>%
  mutate(Date = as.Date(Date), 
         group =  ifelse(Date < as.Date("2055-01-01"), 
                        'below_2055', 'above_2055'), 
         month = format(Date, '%m-%Y'))  %>%
  group_by(group, Date) %>%
  summarise(Average_P = mean(Average_P)) -> result

Или в базе R:

Data$Date <- as.Date(Data$Date)
aggregate(Average_P~group + month, 
          transform(Data, 
                    group = ifelse(Date < as.Date("2055-01-01"), 
                            'below_2055', 'above_2055'),
                    month = format(Date, '%m-%Y')), mean) -> result

Если вам нужен окончательный вывод в виде списка, вы можете использовать split.

split(result,result$group)

Спасибо за ваш ответ! Я попробовал ваш скрипт следующим образом: aggregate(Alentejo_RCP4.5_Average$Average_P + Alentejo_RCP4.5_Average$Month, transform(df, group = ifelse(date < as.Date('2055-01-01'), 'below_2055', 'above_2055'), month = format(date, '%m-%Y')), mean) -> result result Но я получаю эту ошибку Error in as.data.frame.default(x[[i]], optional = TRUE) : cannot coerce class ‘"function"’ to a data.frame Есть идеи?

EvR 14.12.2020 13:50

Спасибо! Попробую еще раз поработать с df и x. Вот пример набора данных. Год Месяц День Дата Среднее_QS Среднее_TN Среднее_TX Среднее_WS Среднее_P 2006 1 1 01.01.2006 4706,250 7,372229 14,47186 2,6203508 6,560209e+00

EvR 14.12.2020 14:22

Извините, я совсем новичок в этом, очень благодарен за ваши ответы. Я попытался сделать образец набора данных на основе страницы, которую вы мне прислали. Надеюсь, что это работает! zz <- " Year Month Day Date Average_QS Average_TN Average_TX Average_WS Average_P 1 2006 1 1 2006-01-01 4706 7.37 14 2.6 6.5 2 2007 1 2 2007-01-02 5659 5.71 13 2.4 2.8 3 2055 3 3 2055-03-03 4427 5.72 13 1.9 3.5 4 2058 3 4 2058-03-04 3172 9.37 14 2.3 5.1 5 2060 1 5 2060-01-05 4947 8.32 13 2.6 3.2" Data <- read.table(text=zz, header = TRUE)

EvR 14.12.2020 15:02

Я пытался это сделать, но он не переходит в «режим сценария» в описании, его все еще можно использовать в таком виде?

EvR 14.12.2020 15:28

Другие вопросы по теме