Подход dplyr / tidyverse:
# load tidyverse packages
library(dplyr)
library(lubridate)
# create example data
mydf <- tibble(
date = ymd_hms(c("2018-01-01 00:00:00", "2018-01-01 00:01:00", "2018-01-01 00:02:00", "2018-01-01 01:00:00", "2018-01-01 01:01:00")),
gas = c(1.5, 1.7, 2.2, 2.0, 2.0),
diesel = c(2.5, 1.9, 1.7, 1.0, 1.0)
)
# create a new variable "datehour" and get max(gas) by datehour
mydf %>%
mutate(datehour = floor_date(date, unit="hour")) %>%
group_by(datehour) %>%
summarize(maxgas = max(gas), maxdiesel = max(diesel))
Чтобы сделать это для многих столбцов без ввода, например, maxgas = max(gas)
для каждого столбца, используйте summarize_all
:
mydf %>%
mutate(datehour = floor_date(date, unit="hour")) %>%
select(-date) %>%
group_by(datehour) %>%
summarize_all(max)