【问题标题】:Longer object length is not a multiple of shorter object length? [duplicate]较长的物体长度不是较短物体长度的倍数吗? [复制]
【发布时间】:2012-08-15 22:23:33
【问题描述】:

我不明白为什么 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")] )

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

【问题讨论】:

  • 可能更适合stackoverflow。
  • 是的,我对此有点不确定。从某个角度来看,R 是一种可编写脚本的统计工具,但它也是一种编程语言。
  • 这个问题至少涉及到一个数据问题,但这将是一个持续的混淆原因,可能没有正确的答案。 meta.stats.stackexchange.com/questions/1/…
  • 欢迎弹跳我到 stackoverflow :-) 这是可以自动完成的吗?
  • 不,让我们把它留在这里(IMO)。

标签: r xts


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。我不确定我是否完全跟随你。你应该更短,因为它是工作日,因为这是一个呼叫中心,我在星期一比星期五有更多的人打电话。在某些事件中,例如发送一封信,我有一种我认为可能是附加的效果(即 1% 的收到信的人会打电话)。因此,如果字母 A 在星期一 1 收到,我收到的电话总数与在星期五收到的电话总数不同。
  • 如何从长度为 15 的向量中减去长度为 10 的向量(例如)? R 将简单地重复较短向量的前 5 个元素,这不是您想要的。因此,您需要将它们合并并结转聚合值。
  • 谢谢,我想我缺少一些基本的见解。对我来说,上面修改后的解决方案看起来与我最初的解决方案几乎相同,但 A-B 测试显示日历错位,这与您让我意识到的一致。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多