为什么在xts/zoo的R中没有应用小时数?

为什么在xts/zoo的R中没有应用小时数?,r,time-series,xts,zoo,R,Time Series,Xts,Zoo,我想按每小时平均值汇总数据。每天都很简单: apply.daily(X2,mean) 为什么没有每小时一次的功能? 我试过了 我正在使用xts和zoo。试试看 period.apply(X2, endpoints(X2, "hours"), mean) apply.daily只是上述内容的包装: > apply.daily function (x, FUN, ...) { ep <- endpoints(x, "days") period.apply(x, ep,

我想按每小时平均值汇总数据。每天都很简单:

apply.daily(X2,mean)
为什么没有每小时一次的功能? 我试过了

我正在使用xts和zoo。

试试看

period.apply(X2, endpoints(X2, "hours"), mean)
apply.daily
只是上述内容的包装:

> apply.daily
function (x, FUN, ...)
{
    ep <- endpoints(x, "days")
    period.apply(x, ep, FUN, ...)
}
>apply.daily
功能(x,乐趣,…)
{
ep
hr.意思是回答第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)
Darren Cook面对同样的问题,编写了函数
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

X2.5在我看来,将例如apply.hourly和apply.minutely添加到包中可能会很有用!谢谢您,到目前为止,对5分钟的周期有什么建议吗?我得到:05:04:00-4;05:09:00-5,…但是如果我稍后合并文件以获得相同的开始和时间步。谢谢。你可以随意摆弄
端点的输出
,或者只看
端点
打印出来的内容(这只是一个索引列表)然后用你喜欢的任何点构建一个类似的列表。正如我对Darren所说的,将观测值与其发生之前的时间对齐似乎是个坏主意,特别是如果你要将聚合的输出与另一个时间序列合并。
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)
> 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=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