Я не часто использую данные в формате временных рядов (т.е. xts
), поэтому я предоставил решение с использованием данных в формате data.frame
.
(Обратите также внимание, что я изменил имена столбцов этого фрейма данных на отдельные слова, чтобы с ним было легче работать. Я публикую структуру своего фрейма данных в конце этого вопроса.)
Я использую два пакета:
HMisc
для trunc
методов для классов POSIXt
plyr
для некоторого волшебства, чтобы разделить, применить и объединить данные
код:
A <- as.data.frame(A)
library(Hmisc)
A$Date <- trunc(A$Date, units="secs")
A
library(plyr)
ddply(A, .(Date, Observed), summarise, Speed=mean(Speed))
результаты в несколько ином формате, чем вы указали, но должно быть легко изменить это в широкий формат, который вы просили.
Date Observed Speed
1 2011-01-11 12:12:01 A 1.5
2 2011-01-11 12:12:01 B 3.0
3 2011-01-11 12:12:01 C 4.0
4 2011-01-11 12:12:02 A 7.0
5 2011-01-11 12:12:02 D 2.0
Вот dput
результаты A:
A <- structure(list(Date = structure(list(sec = c(1, 1, 1, 1, 2, 2
), min = c(12L, 12L, 12L, 12L, 12L, 12L), hour = c(12L, 12L,
12L, 12L, 12L, 12L), mday = c(11L, 11L, 11L, 11L, 11L, 11L),
mon = c(0L, 0L, 0L, 0L, 0L, 0L), year = c(111L, 111L, 111L,
111L, 111L, 111L), wday = c(2L, 2L, 2L, 2L, 2L, 2L), yday = c(10L,
10L, 10L, 10L, 10L, 10L), isdst = c(0L, 0L, 0L, 0L, 0L, 0L
)), .Names = c("sec", "min", "hour", "mday", "mon", "year",
"wday", "yday", "isdst"), class = c("POSIXlt", "POSIXt"), tzone = c("",
"GMT", "BST")), Observed = structure(c(1L, 1L, 2L, 3L, 4L, 1L
), .Label = c("A", "B", "C", "D"), class = "factor"), Speed = c(1L,
2L, 3L, 4L, 2L, 7L)), .Names = c("Date", "Observed", "Speed"), row.names = c(NA,
-6L), class = "data.frame")