我不经常使用时间序列格式的数据(即xts
),所以我提供了一个使用数据的解决方案data.frame
format.
(另请注意,我已将此数据框的列名称更改为单个单词,以使其更易于使用。我在本问题的末尾发布了数据框的结构。)
我使用两个包:
-
HMisc
for 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")