我有几个合并的每日动物园时间序列(假设合并集的名称是'test'),它们采用以下格式:
>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
我想以多种方式聚合/操纵时间序列。然而,最简单的平均或求和正在逃避我。我尝试了以下方法:
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包装成一个整体平均值。相同的基础,同时保持zoo / xts格式。
非常感谢
答案 0 :(得分:2)
根据显示的示例,我们可以连接行并获取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