我正在尝试计算每小时数据的多年平均值。我希望保留这些年来的日子和时间。我觉得这应该很简单,但我已经四处寻找答案而没有找到答案。
我使用的是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日零时的平均值
感谢您对此的帮助!
答案 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')
希望有所帮助