Това наистина е продължение на моя въпрос вчера, където научих за 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
? Благодаря!
АКТУАЛИЗАЦИЯ: Джошуа Улрих посочва, че имам нужда от функция, която познава колони (като 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