2016-04-28 103 views
1

我有几个合并的每日动物园时间序列(假设合并集的名称是“测试”)出现在以下格式:平均时间系列apply.daily(

>test 


       TS1  TS2  TS3 
2014-07-30 2.0  3.0  4.0 
2014-07-31 2.5  3.0  4.5 
2014-08-01 3.0  3.0  5.0 

我想通过几种方式来聚合/操纵时间序列。然而,最简单的平均或suming正在逃避我。我试过如下:

ts <- apply.daily(as.xts(test),mean) 

,我原以为会给我下面的输出:

>ts 

        X  
    2014-07-30 3.0  
    2014-07-31 3.3  
    2014-08-01 3.7  

但是,它会返回与之前相同的时间序列。我知道这对我计划使用的apply.weekly()apply.monthly()很有用,但是我怎样才能适应所有这些功能,在相同的基础上将TS1,TS2和TS3换成总体平均值,同时保持动物园/ xts格式。基于示例

非常感谢

回答

1

表明,我们可以连接行,并采取mean

apply.daily(as.xts(test), function(x) round(mean(c(x)),1)) 
#   [,1] 
#2014-07-30 3.0 
#2014-07-31 3.3 
#2014-08-01 3.7 

注意,使用的日常数据集的OP代码返回输入数据,只有对标准进行单一观察。假设如果该数据集是DateTime类,然后使用apply.daily将返回mean为每一天,与另一个mean包起来,以获得mean的每一行,即

test1 <- structure(list(TS1 = c(2, 2.5, 3, 2.2), TS2 = c(3, 3, 3, 3.2), 
TS3 = c(4, 4.5, 5, 4.4)), .Names = c("TS1", "TS2", "TS3"), 
class = "data.frame", row.names = c("2014-07-30 07:00:00", 
"2014-07-31 05:00:00", "2014-08-01 03:00:00", "2014-07-30 07:20:00")) 

apply.daily(as.xts(test1), function(x) round(mean(mean(x)),1)) 
#     [,1] 
#2014-07-30 07:20:00 3.1 
#2014-07-31 05:00:00 3.3 
#2014-08-01 03:00:00 3.7 

由于我们使用匿名函数,我们不需要两个mean

apply.daily(as.xts(test1), function(x) round(mean(x),1)) 
#      [,1] 
#2014-07-30 07:20:00 3.1 
#2014-07-31 05:00:00 3.3 
#2014-08-01 03:00:00 3.7 

检查与OP的做法上述结果

apply.daily(as.xts(test1), mean) 
#     TS1 TS2 TS3 
#2014-07-30 07:20:00 2.1 3.1 4.2 
#2014-07-31 05:00:00 2.5 3.0 4.5 
#2014-08-01 03:00:00 3.0 3.0 5.0 

round(mean(c(2.1, 3.1, 4.2)), 1) 
#[1] 3.1 
round(mean(c(2.5, 3.0, 4.5)), 1) 
#[1] 3.3