Если мы агрегируем по «Дню», преобразуем столбец «Время» в класс Date
, удаляя атрибуты Time
, сгруппированные по ним, и получим max
из 'd'.В посте ОП синтаксис для data.table
включает mydf
и df
.Предполагая, что они одинаковы, нам нужно
library(data.table)
setDT(mydf)[, .(d = max(d)), by = .(Day = as.Date(Time))]
Или использовать aggregate
из base R
aggregate(d ~ Day, transform(mydf, Day = as.Date(Time)), FUN = max)
Или с tidyverse
library(tidyverse)
mydf %>%
group_by(Day = as.Date(Time)) %>%
summarise(d = max(d))
ПРИМЕЧАНИЕ. Исходя из комментариев ОП, столбцы с «a» по «d» относятся к классу factor
.Нам нужно преобразовать его в numeric
либо в начале, либо преобразовать его на этапе обработки
mydf$d <- as.numeric(as.character(mydf$d)))
Для нескольких столбцов
mydf[c('a', 'b', 'c', 'd')] <- lapply(mydf[c('a', 'b', 'c', 'd'), function(x)
as.numeric(as.character(x)))
data
mydf <- structure(list(Time = c("2015-01-01 00:00:00", "2015-01-01 01:00:00",
"2015-01-01 02:00:00", "2015-01-01 03:00:00", "2015-01-01 04:00:00",
"2015-01-01 05:00:00"), a = c(863L, 920L, 1164L, 1503L, 1826L,
2109L), b = c(1051L, 1009L, 973L, 949L, 953L, 952L), c = c(1899L,
1658L, 1371L, 779L, 720L, 743L), d = c(25385L, 24382L, 22734L,
21286L, 20264L, 19905L)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))