gpt4 book ai didi

r - 在 R 中对宽范围的动物园对象快速应用 xts 向量操作

转载 作者:行者123 更新时间:2023-12-04 12:38:15 26 4
gpt4 key购买 nike

这真的是我的 question 的延伸昨天我了解到 apply.weekly。这很好用,但我想在宽 zoo 对象上执行此操作。如果我在宽 zoo 上使用 apply.weekly,它会对列求和,然后执行每周聚合:

> library(xts)
> set.seed(2001)
> zoo.daily <- zoo(data.frame(a=rnorm(20), b=rnorm(20), c=rnorm(20)), order.by=as.Date("2001-05-25") + 0:19)
> apply.weekly(zoo.daily, sum)
2001-05-27 2001-06-03 2001-06-10 2001-06-13
1.091999 -3.017688 3.842305 2.045370
> apply.weekly(zoo.daily[, 1] + zoo.daily[, 2] + zoo.daily[, 3], sum)
2001-05-27 2001-06-03 2001-06-10 2001-06-13
1.091999 -3.017688 3.842305 2.045370

我尝试了 apply 运算符系列,但它们似乎去掉了 zoo 日期索引。我可以在 for 循环中完成它,但它确实很耗时(比 as. yearmon 周期)。这是 for 循环:

week.ends <- index(zoo.daily[endpoints(zoo.daily, "weeks")[-1], ])
num.weeks <- nweeks(zoo.daily)
num.stocks <- ncol(zoo.daily)
zoo.weeks <- zoo(matrix(NA, num.weeks, num.stocks), order.by=week.ends)
for (i in seq(num.stocks)) {
zoo.weeks[, i] <- apply.weekly(zoo.daily[, i], mean)
}

哪个有效(即,将每个向量分开):

2001-05-27 -0.36663040 -0.108648725  0.8392788
2001-06-03 0.33032998 0.003025018 -0.7644534
2001-06-10 0.07816992 0.620198931 -0.1494681
2001-06-13 0.02114608 0.956226189 -0.2955824

有没有办法用apply.weekly快速操作所有列?谢谢!

更新:Joshua Ulrich 指出我需要一个列感知函数(如 colMeanscolSums)。当我这样做时,我得到了正确的答案,但作为转置矩阵。我应该重新分类并继续前进吗?还是我的选项/设置有误?

> apply.weekly(zoo.daily, colSums)
[,1] [,2] [,3] [,4]
a -1.0998912 2.31230989 0.5471894 0.06343824
b -0.3259462 0.02117512 4.3413925 2.86867857
c 2.5178365 -5.35117351 -1.0462765 -0.88674717

最佳答案

您需要在 apply.weekly 中使用列感知函数。例如,使用 colSums 而不是 sumcolMeans 而不是 mean

R-forge 上 xts 的最新修订给出了以下输出。当前在 CRAN 上的版本返回转置后的数据。

# install.packages("xts", repos="http://r-forge.r-project.org")
> apply.weekly(zoo.daily, colSums)
a b c
2001-05-27 -1.09989120 -0.32594617 2.5178365
2001-06-03 2.31230989 0.02117512 -5.3511735
2001-06-10 0.54718941 4.34139252 -1.0462765
2001-06-13 0.06343824 2.86867857 -0.8867472
> apply.weekly(zoo.daily, colMeans)
a b c
2001-05-27 -0.36663040 -0.108648725 0.8392788
2001-06-03 0.33032998 0.003025018 -0.7644534
2001-06-10 0.07816992 0.620198931 -0.1494681
2001-06-13 0.02114608 0.956226189 -0.2955824

如果需要使用自定义函数,可以结合使用apply.weeklyapply:

> apply.weekly(zoo.daily, function(x) apply(x,2,mean))
a b c
2001-05-27 -0.36663040 -0.108648725 0.8392788
2001-06-03 0.33032998 0.003025018 -0.7644534
2001-06-10 0.07816992 0.620198931 -0.1494681
2001-06-13 0.02114608 0.956226189 -0.2955824

关于r - 在 R 中对宽范围的动物园对象快速应用 xts 向量操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com