Как найти максимальное значение с датой в каждом месяце в R? - PullRequest
0 голосов
/ 09 октября 2019

Я ищу ответ на вопрос, который состоит из двух частей. В части A: я хотел бы построить фрейм данных с максимальным значением total_precip (переменная в моем фрейме данных) для каждого месяца с указанием года, месяца и дня его появления. В части B: я хотел иметь еще один фрейм данных, в котором я могу иметь максимальный совокупный total_precip для двух последовательных дней (т. Е. Сумма total_precip на два последовательных дня выше, чем любые другие два дня) в каждом месяце с датами и соответствующими значениями. Например, если сумма total_precip 10 и 11 января больше, чем любые другие два последовательных дня месяца, даты (год, месяц и соответствующие дни) вместе со своим значением будут храниться во фрейме данных для каждого месяцагод.

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

library(weathercan)
library(tidyverse)
DF = weather_dl(station_ids = 2925, start = "1990-01-01", end = "1995-12-31", interval = "day")[,c(11,12,13,14,32)]
DF$month = as.numeric(DF$month)
DF$day = as.numeric(DF$day)
MaxValWithDate = DF %>% group_by(year, month) %>% summarise(MaxVal = max(total_precip))

1 Ответ

2 голосов
/ 09 октября 2019

Мы можем использовать slice для части A:

DF %>%
    group_by(year, month) %>%
    slice(which.max(total_precip))

 #   date       year  month   day total_precip
 #   <date>     <chr> <dbl> <dbl>        <dbl>
 # 1 1990-01-28 1990      1    28          7.8
 # 2 1990-02-21 1990      2    21          4.8
 # 3 1990-03-12 1990      3    12         49.2
 # ....

И затем мы можем использовать функцию lead вместе с slice снова для части B:

DF %>%
    group_by(year, month) %>%
    mutate(lead_total_precip = lead(total_precip),
           lead_day = lead(date)) %>%
    mutate(cumu_precip = total_precip + lead_total_precip)  %>%
    slice(which.max(cumu_precip))

   # date       year  month   day total_precip lead_total_precip lead_day   cumu_precip
   # <date>     <chr> <dbl> <dbl>        <dbl>             <dbl> <date>           <dbl>
   # 1 1990-01-28 1990      1    28          7.8               5.2 1990-01-29        13  
   # 2 1990-02-21 1990      2    21          4.8               1.8 1990-02-22         6.6
   # 3 1990-03-11 1990      3    11          0                49.2 1990-03-12        49.2
   # ....

Полученные data.frames должны иметь всю необходимую информацию, тогда вы можете использовать функцию select, чтобы сохранить только нужные вам столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...