为什么没有apply.hourly与XTS /动物园R'(Why is there no a

2019-08-31 06:18发布

我想通过每小时平均汇总数据。 日报是很容易的:

apply.daily(X2,mean)

为什么会出现每小时没有作用? 我试过了

hr.means <- aggregate(X2, format(X2["timestamp"],"%Y-%m-%d %H"))

并得到了始终与装饰参数错误。 是否有更简单的功能类似于apply.daily? 如果我想要聚合5分钟的平均值。 数据是每分钟值:

"timestamp", value 
"2012-04-09 05:03:00",2
"2012-04-09 05:04:00",4
"2012-04-09 05:05:00",5
"2012-04-09 05:06:00",0
"2012-04-09 05:07:00",0
"2012-04-09 05:08:00",3
"2012-04-09 05:09:00",0
"2012-04-09 05:10:00",1

我使用的XTS和动物园。

Answer 1:

尝试

period.apply(X2, endpoints(X2, "hours"), mean)

apply.daily是简单地对上述的包装:

> apply.daily
function (x, FUN, ...)
{
    ep <- endpoints(x, "days")
    period.apply(x, ep, FUN, ...)
}


Answer 2:

hr.means <- aggregate(X2, format(time(X2),"%y-%m-%d %H"), mean) 

这应该很好地工作。



Answer 3:

回答第2部分:

如果我想要什么汇总的5分钟是什么意思?

正如@eddit上述评论已经提到:

df <- read.table(header=TRUE, sep=",", stringsAsFactors=FALSE, text="
timestamp, value 
2012-04-09 05:03:00,2
2012-04-09 05:04:00,4
2012-04-09 05:05:00,5
2012-04-09 05:06:00,0
2012-04-09 05:07:00,0
2012-04-09 05:08:00,3
2012-04-09 05:09:00,0
2012-04-09 05:10:00,1")
X2 <- xts(df$value, as.POSIXct(df$timestamp))

X2.5min <- period.apply(X2, endpoints(X2, "minutes", 5), mean)

我得到:5点04分00秒 - 4; 5时09分00秒 - 5,...但也许有可能第一个值设置为05:00:00,并与5时05分00秒继续可能会更容易,如果我以后合并文件具有相同启动和时间步长。

确实:

> X2.5min
                    [,1]
2012-04-09 05:04:00  3.0
2012-04-09 05:09:00  1.6
2012-04-09 05:10:00  1.0

达伦·库克在在十字架验证面临着同样的问题,写功能align.time.down

align.time.down=function(x,n){index(x)=index(x)-n;align.time(x,n)}

这可以用来向下调整时间:

X2.5mindown <- align.time.down(X2.5min, 5 * 60)
X2.5mindown
                    [,1]
2012-04-09 05:00:00  3.0
2012-04-09 05:05:00  1.6
2012-04-09 05:10:00  1.0


文章来源: Why is there no apply.hourly in R with xts/zoo?