计算每小时和每天的多年平均值

时间:2014-05-21 06:35:32

标签: r

我正在尝试计算每小时数据的多年平均值。我希望保留这些年来的日子和时间。我觉得这应该很简单,但我已经四处寻找答案而没有找到答案。

我使用的是R版3.0.3。

start <- ISOdatetime(1970, 1, 1, hour=0, min=0, sec=0, tz="GMT")
end <- ISOdatetime(1971, 12, 31, hour=18, min=0, sec=0, tz="GMT")
set.seed(1)
z <- zooreg(rnorm(2920), start = start , end = end, frequency = 4, deltat = 21600)

#attempt to aggregate ... doesn't work
z.daily.agg <- aggregate(z, as.POSIXct(cut(time(z), "6 hours", include=T)), mean)

我想要的输出如下:

01-01 00:00 1970年至1970年1月1日零时的平均值

01-01 06:00 1970年至1971年1月6日零时的平均值

感谢您对此的帮助!

2 个答案:

答案 0 :(得分:0)

有点粗糙,但你可以

#1) Use the substr function to extract the parts of the date string you want:

    date = substr(time(z), 6,16)

#2) Then bind this to the data:

    temp = data.frame(z, date)

#3) Make sure the date is a factor:

    temp$date = as.factor(temp$date)

#4) And now aggregate:

    aggregate(temp$z~temp$date, FUN=mean)

这能否为您提供您所追求的结果?

答案 1 :(得分:0)

我相信这会有效 - 使用lubridate包中的小时功能。

require(lubridate)
aggregate(z, hour(index(z)), mean)

编辑以回应您的评论 - 抱歉,我没有意识到您想要的确切内容。您可以在两年内逐月平均每个小时(我认为这就是您想要的),如下所示:

aggregate(z ~ month(index(z)) + day(index(z)) + hour(index(z)), FUN = 'mean')

希望有所帮助