在R中的zoo对象行中应用函数

时间:2014-03-09 14:33:40

标签: r function zoo

我想计算这个动物园对象的每一行的平均值,所以最后我需要一个新的动物园对象,每分钟都有平均值。 实际上我正在尝试应用更高级的统计数据,但从计算的角度来看,它应该与平均值相同。

  

头(ZS)

2014-03-09 08:00:00 1839.00 1842.00 1849.00 1838.50 1851.75 1843.50 1862.50 1874.00 1875.00 1878.00
2014-03-09 08:01:00 1838.75 1842.00 1848.75 1838.25 1851.75 1844.25 1862.50 1874.00 1875.25 1877.75
2014-03-09 08:02:00 1838.50 1842.25 1848.25 1838.25 1851.50 1843.75 1862.50 1874.00 1875.50 1878.00
2014-03-09 08:03:00 1839.25 1842.50 1848.25 1838.50 1851.50 1843.00 1862.25 1874.00 1875.50 1877.75
2014-03-09 08:04:00 1839.25 1842.50 1848.25 1838.00 1851.50 1843.00 1862.25 1874.25 1875.25 1877.75
2014-03-09 08:05:00 1838.75 1842.25 1848.25 1837.75 1851.75 1843.50 1862.25 1874.00 1875.50 1877.75

2 个答案:

答案 0 :(得分:4)

试试这个:

zoo(rowMeans(zs), time(zs))

zoo(apply(zs, 1, mean), time(zs))

Reduce(`+`, as.list(zs)) / ncol(zs)

zmean <- zs[, 1]
for(i in 2:ncol(zs)) zmean <- zmean + zs[, i]
zmean <- zmean / ncol(zs)

ADDED 更多方法

答案 1 :(得分:0)

我遇到了这个问题,想要一个更可靠的解决方案。具体来说,我想要一个与apply相同的功能,除了在参数{中传递了zoo对象(或从zoo继承的对象,例如xts)之外。 {1}}。在这种情况下,函数应尽可能返回X(或zoo等)对象。结果还应该保留用户可能附加到原始xts对象的所有其他属性。

有几个挑战。首先,根据通过参数zooapply传递给MARGIN的内容,FUN可能返回applylistvector的尺寸大于2。有关更多详细信息,请参见array文档。

因此,如果您考虑一下,可以将apply的唯一时间结果作为apply对象返回,即结果是带有zoo的{​​{1}}或带有matrix的向量。否则,您将无法确定如何将原始nrow(result) == nrow(originalZooObject)对象的length(result) == nrow(originalZooObject)值添加到index的结果中。

我想到了以下代码,该代码在结果中保留了原始zoo对象的所有适用属性。因此,它也可以与apply之上的大多数S3类一起使用,例如zoo

我唯一了解不到的是用户可能附加了一个属性,该属性适用于原始zoo对象的列。如果xts合并了列,则user属性可能不适用于结果的列。

尽管我使用命名约定从泛型函数进行调度,但是zoo不是泛型的,因此FUN被设计为直接调用。如果使用通用版本的apply覆盖apply.zoo函数,那么只要将apply对象传递给applyapply.zoo就会自动运行。 / p>

zoo