【问题标题】:period.apply in xts returning more than 1 valueperiod.apply 在 xts 中返回超过 1 个值
【发布时间】:2012-08-23 06:33:48
【问题描述】:

我有一个xts 对象,我正在尝试将period.apply 与一个函数一起使用,该函数将为每个非重叠周期返回多个值。例如:我运行回归并希望返回每个非重叠时期的残差,因此我的函数返回该时期的所有日期以及每个特定日期的残差。目前看来xts 不支持这种行为。它是否正确?有解决办法吗?

> df <- data.frame(x=rnorm(31)+10, y=rnorm(31)+10)
> xts.data <- xts(df, order.by=as.Date(13514:(13544),origin="1970-01-01"))
> f <- function(d) {as.numeric(coredata(d[,"x"]))}
> period.apply(xts.data, INDEX=endpoints(xts.data,"weeks"), FUN=f)
Error in coredata.xts(x) : currently unsupported data type

【问题讨论】:

  • 请重现代码
  • 不正确。 xts 已经支持了一段时间。请提供一个可重现的例子。
  • 这是不可重现的,因为你没有告诉我们df 是什么。另外,df 是 stats 包中的一个函数,因此您的代码会导致错误。
  • 哎呀,对不起!添加

标签: r time-series xts zoo


【解决方案1】:

我突然想到这个问题很可能是每个不重叠的周期没有相同数量的观察,所以没有办法轻松创建类似矩阵的结构。

改用这样的东西,注意每个列表元素的长度是不同的:

lapply(split(xts.data,"weeks"), f)

为了说明period.apply 如何在每个周期返回多于一列:

period.apply(xts.data, endpoints(xts.data,"weeks"), range)
period.apply(xts.data, endpoints(xts.data,"weeks"), colMeans)

【讨论】:

  • 你能解释一下为什么这很重要吗?不是每个返回值都必须具有相同数量的列吗?行可以变化吗?
  • @Alex: period.apply 每个周期只返回一行。传递给period.apply 的函数必须返回一个向量。
  • 我认为这基本上就是问题的答案,那么不是吗?不能将返回向量的函数传递给period.apply
  • @Alex:不,函数可以返回一个向量,但它必须在所有时间段内始终保持相同的长度。
  • 如果像 sapply 一样,如果 period.apply 在返回无法转换的复杂或不规则数据结构时求助于列表输出,这将是最有用的一个 xts 或一个矩阵,因为我一直遇到这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多