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

tov*_*are 11 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
Run Code Online (Sandbox Code Playgroud)

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

head(d)
2009-01-02 116
2009-01-05 256
2009-01-06 286
Run Code Online (Sandbox Code Playgroud)

使用:

coredata(d) <- coredat(d) - u[format(index(d),"%w")];
Run Code Online (Sandbox Code Playgroud)

这会导致警告.

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

修订后的解决方案:尝试2

apply.daily(d, function(x) coredata(x) - u[format(index(x), "%w")] )
Run Code Online (Sandbox Code Playgroud)

我确实有一个严重的错误.这没有给出任何警告,我通过这样做测试:

apply.daily(d, function(x) u[format(index(x), "%w")] )
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*ane 13

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

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

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