قم بتطبيق عمليات متجه XTS بسرعة عبر كائنات حديقة حيوانات واسعة في ص
سؤال
هذا حقا امتداد لي سؤال أمس حيث علمت عنه apply.weekly
. هذا يعمل بشكل رائع ، لكني أريد أن أفعل هذا على نطاق واسع zoo
أشياء. إذا استخدمت apply.weekly
على نطاق واسع zoo
يلخص الأعمدة ، ثم يؤدي التجميع الأسبوعي:
> 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
حلقة ، لكنها تستغرق وقتًا طويلاً (أكثر بكثير ، أكثر من عامل أبطأ من أربعة aggregate
تعمل على 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 إلى أنني بحاجة إلى وظيفة مدركة للعمود (مثل colMeans
أو colSums
). عندما أفعل هذا ، أحصل على الإجابات الصحيحة ، ولكن كمصفوفة تم نقلها. هل يجب أن أتخلى عن المضي قدمًا؟ أو هل لدي خيار/إعداد خاطئ؟
> 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
بدلاً من sum
أو colMeans
بدلاً من mean
.
المراجعات الأكثر حداثة xts
على r-forge إعطاء الإخراج أدناه. يعيد الإصدار الموجود حاليًا على 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.weekly
و apply
:
> 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