Сначала давайте создадим некоторые тестовые данные:
library(xts) # also pulls in zoo
library(timeDate)
library(chron) # includes times class
# test data
x <- xts(1:3, timeDate(c("2001-01-01 09:30:00", "2001-01-01 09:31:00",
"2001-01-02 09:30:00")))
1) aggregate.zoo . Теперь попробуйте преобразовать его в класс times
и выполнить агрегацию с использованием одной строки:
aggregate(as.zoo(x), times(format(time(x), "%H:%M:%S")), mean)
1a) агрегат.зоо (вариация) . или это изменение, которое преобразует более короткий совокупный ряд в times
, чтобы избежать необходимости делать это в более длинном исходном ряду:
ag <- aggregate(as.zoo(x), format(time(x), "%H:%M:%S"), mean)
zoo(coredata(ag), times(time(ag)))
2) tapply . Альтернативой будет tapply
, что, вероятно, быстрее:
ta <- tapply(coredata(x), format(time(x), "%H:%M:%S"), mean)
zoo(unname(ta), times(names(ta)))
РЕДАКТИРОВАТЬ: упрощено (1) и добавлено (1a) и (2)