0

嗨,伙计们,我有几个数据框,每个数据框由 2 列组成:

Date                   Value1
2013-07-03 16:05:00     1178
2013-07-03 16:10:00     1200
2013-07-03 16:15:00     1180
2013-07-03 16:20:00     1175
2013-07-03 16:25:00     1205
2013-07-03 16:30:00     1170
.....

换句话说,我每五分钟(整月)测量一次 Value1。我尝试的(没有结果)是创建一个包含两列的新 df,每个小时的平均值为 Value1。结果应该是这样的:

Date                   Value1
2013-07-03 16:00:00     1180
2013-07-03 17:00:00     1210
.....

其中 1178 是从 16:00 到 17:00 期间 Value1 的平均值,等等。我将日期列格式化为日期

df$Date<-as.POSIXct(df$Date, "%Y/%m/%d %H:%M:%S", tz = "")

有没有快速的方法来做到这一点?

我也尝试使用 zoo 包:

zoo_df<-read.zoo(df, header=T, tz="GMT")
aggregate(zoo_df, as.Date, mean)

显然,函数 as.Date 非常适合每日平均值,难道没有类似的方法可以为每小时平均值做同样的事情吗?

4

1 回答 1

4

Use the time series packages:

DF <- data.frame(Date=seq(from=as.POSIXct("2013-07-03 16:05:00", tz="GMT"),
                          to=as.POSIXct("2013-07-04 16:05:00", tz="GMT"),
                          by="5 min"),
                 Value1=1:289)

library(xts)
myTS <- zoo(DF[,2], DF[,1])

ep <- endpoints(myTS, "hours")
period.apply(myTS, INDEX=ep, FUN=mean) 
于 2013-08-09T08:53:03.107 回答