Объединение почасовых данных о температуре в R

Моя цель - найти минимальную и максимальную дневную температуру и добавить их во фрейм данных. Мой текущий фрейм данных выглядит следующим образом:

ROW DATE_TIME  TEMP (DEG C)
1   5/1/1999   4.6
2   5/1/1999   3.8
3   5/1/1999   2.9

Я пытаюсь получить дневной диапазон температуры, используя эти данные, но основная проблема, с которой я сталкиваюсь, - это "нестандартные" даты. Набор данных, который я использую, состоит из нескольких тысяч точек данных, поэтому я хотел бы иметь код, который выполняет max-min для каждых 24 строк, чтобы получить суточные колебания температуры.

Спасибо!


person Will Kirkpatrick    schedule 29.05.2018    source источник
comment
Каждые 24 ряда - это день? Могу я игнорировать переменную DATE_TIME?   -  person DJV    schedule 29.05.2018
comment
да. Я думаю, это сработает. @DJV   -  person Will Kirkpatrick    schedule 29.05.2018


Ответы (1)


Если вы хотите рассчитать его с помощью текущего окна, вы можете использовать функцию gtools::running() и установить для аргументов by() и width() значение 24.

require(tidyverse)
require(gtools)

set.seed(123)
df <- data.frame(row = c(seq(1, 24*5, by = 1)), 
                 date = as.Date(c(
                   rep(c("02/25/92"), 24), 
                   rep(c("02/26/92"), 24),
                   rep(c("02/27/92"), 24),
                   rep(c("02/28/92"), 24), 
                   rep(c("02/29/92"), 24)), 
                   format = "%m/%d/%y"),
                 temp = rnorm(24*5, mean = 5, sd = 5)) 

#Function to calculate the min. and max. of a vector/column 
MinMaxFunction <- function(x) {
  return(data.frame(min = min(x, na.rm = TRUE), 
             max = max(x, na.rm = TRUE)))
}

#Calculating the running min. max. 
dfRunningMean <- running(df$temp,
                         fun = MinMaxFunction,
                         by = 24, 
                         width = 24) %>%
  t() %>% 
  as.data.frame()

dfRunningMean

             min      max
1:24   -4.833086 13.93457
25:48  -3.433467 15.84478
49:72  -6.545844 15.25042
73:96  -1.103589 11.80326
97:120  -3.33971 15.93666

Или вы можете сделать это с помощью подхода tidyverse и рассчитать мин. / Макс. на каждую дату.

require(tidyverse)


df %>% 
  group_by(date) %>% 
  summarise(min = min(temp, na.rm = TRUE), 
            max = max(temp, na.rm = TRUE))

  date         min   max
  <date>     <dbl> <dbl>
1 1992-02-25 -4.83  13.9
2 1992-02-26 -3.43  15.8
3 1992-02-27 -6.55  15.3
4 1992-02-28 -1.10  11.8
5 1992-02-29 -3.34  15.9
person DJV    schedule 29.05.2018
comment
Проблема, которую я вижу, заключается в том, что мне нужно не среднее значение за каждый день, а максимальное-минимальное значение каждых 24. По сути, каждые 24 строки являются подмножеством, и мне нужно максимальное-минимальное значение каждой из них. Может, этого нельзя сделать? - person Will Kirkpatrick; 31.05.2018
comment
Пожалуйста, посмотрите мои правки, и R может все! ;) - person DJV; 31.05.2018
comment
Рад, что смог помочь, и если это отвечает на ваш вопрос, пожалуйста, отметьте принять ответ :) - person DJV; 31.05.2018