Как я могу получить среднее значение за триместр для фрейма данных и построить новый с этими значениями? - PullRequest
2 голосов
/ 13 июля 2020

Я получил фрейм данных с данными об осадках (третий столбец). Первый столбец - это месяцы (только январь, ноябрь и декабрь). Второй столбец - это годы.

Я хочу получить среднее значение за триместр НОЯБРЬ-ДЕКАБРЬ-ЯНВАРЬ. Как я могу это сделать?

Например: я хочу вычислить среднее значение за ноябрь 1961 г., декабрь 1961 г. и январь 1962 г., и в моем новом фрейме данных это число может быть числом для зимы 1961/62 г. Затем я хочу сделать то же самое с ноябрем 1962 года, декабрем 1962 года и январем 1963 года, и среднее значение может быть значением для зимы 1962/63 года в моем новом фреймворке. Я хочу сделать это для всего фрейма данных.

Как видите: у меня НЕТ данных за ноябрь 1960 г. и декабрь 1960 г., поэтому значение для зимы 1960/61 может быть только значением января 1961 г.

Как я могу это сделать?

Вот мои данные:

   MesDelTrimestre AñoDelTrimestre PPdelTrimestre
1          January            1961       5.000000
2         November            1961       4.986667
3         December            1961       3.658065
4          January            1962       2.996674
5         November            1962       6.708667
6         December            1962       3.503226
7          January            1963       2.106452
8         November            1963       2.586667
9         December            1963       6.996774
10         January            1964       1.051613
11        November            1964       2.660000
12        December            1964       2.364516

Используя этот код, вы можете представить тот же фрейм данных, что и из мой пример. Мой фрейм данных заканчивается в январе 2019 года

Вот несколько примеров данных:

DF <- data.frame(
  a=c("January", "November", "December", "January", "November", "December", "January", "November", "December", "January"),
  b=c("1961", "1961", "1961", "1962", "1962", "1962", "1963", "1963", "1963", "1964"),
  c=c(5.3, 4, 7, 2, 4, 7, 5, 9, 2, 5)
)

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Хорошо, я нашел решение.

Я использовал эти строки, и это сработало! Обратите внимание, что я удалил свою первую строку только потому, что не хотел использовать это значение. После запуска этого кода я получил среднее значение за ноябрь, декабрь и январь, которое и хотел вычислить. Как видите, n = 3 (но работает с любым количеством строк, которые вам нужно использовать для вычисления среднего)

DF[-1,] n<- 3; aggregate(DF,list(rep(1:(nrow(DF)%/%n+1),each=n,len=nrow(DF))),mean)[-1]
0 голосов
/ 13 июля 2020

Мы можем использовать complete для включения отсутствующих комбинаций месяцев для каждого года. Поскольку нам не нужны январь 1960 года, ноябрь и декабрь 1964 года, мы можем их удалить. Затем мы можем создавать группы из каждых 3 строк и брать из них mean.

library(dplyr)
order_vec <- c('January', 'November', 'December')

DF %>%
  type.convert() %>%
  tidyr::complete(b = seq(min(b) - 1, max(b)), 
                  a = factor(order_vec, levels = order_vec)) %>%
   slice(-c(1L, n() - 1, n())) %>%
   group_by(grp = ceiling(row_number()/3)) %>%
   summarise(mean = mean(c, na.rm = TRUE))

#    grp  mean
#  <dbl> <dbl>
#1     1  5.3 
#2     2  4.33
#3     3  5.33
#4     4  5.33
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...