较长的物体长度不是较短物体长度的倍数?

时间:2010-08-03 09:14:22

标签: r xts

我不明白为什么R给我一个警告“长物体长度不是较短物体长度的倍数”

我有这个对象,它通过在xts系列上进行聚合而得到工作日中位数:

u <- aggregate(d, list(Ukedag = format(index(d),"%w")), median)

1 314.0
2 282.5
3 270.0
4 267.0
5 240.5

然后我尝试将它应用到我的原始xts系列,看起来像这样(只是更长)

head(d)
2009-01-02 116
2009-01-05 256
2009-01-06 286

使用:

coredata(d) <- coredat(d) - u[format(index(d),"%w")];

会导致警告。

目的是减去工作日的平均值。尽管有警告,它似乎仍然有效,但我应该担心什么?

修订解决方案:尝试2

apply.daily(d, function(x) coredata(x) - u[format(index(x), "%w")] )

我的确犯了一个严重的错误。这没有给出任何警告,我通过这样做进行了测试:

apply.daily(d, function(x) u[format(index(x), "%w")] )

然后检查一些日期,它似乎与日历一致。

1 个答案:

答案 0 :(得分:13)

是的,这是你应该担心的事情。使用nrow()检查对象的长度。 R可以自动复制对象,如果它们不同,它们的长度相同,这意味着您可能正在对不匹配的数据执行操作。

在这种情况下,您有一个明显的缺陷,即您从原始数据中减去聚合数据。这些肯定会有不同的长度。我建议你将它们合并为时间序列(使用日期),然后是locf(),然后进行减法。否则,通过将原始日期截断为与聚合系列相同的间隔来合并它们。要非常小心,不要放弃观察。

最后,正如您开始时的一些一般性建议:查看计算结果,看看它们是否有意义。您甚至可以将它们拉入电子表格并复制结果。