У меня есть большой фрейм данных (названный z ), который выглядит следующим образом:
RPos M1
1 -0.00020
2 0.00010
3 -0.00012
4 -0.00035
5 -0.00038
...etc (about 300,000 observations)
По сути, это временной ряд (хотя на самом деле )фрейм данных, а не ts
или zoo
).Где RPos - это порядковый номер (явно хранится), а M1 - любая метрика.
У меня есть другой фрейм данных (с именем actionlist ) с около 30 000 * непоследовательных наблюдений.Каждое значение в столбце RPos в actionlist представляет последнюю из 34 последовательных точек.
Мой последний фрагмент данных - это один фрейм данных (с именем x ), состоящий всего из 34 последовательных наблюдений.
Моя цель - рассчитать коэффициенты корреляции между x и каждым наблюдением в списке действий (который, опять же, является конечной точкой 34 последовательных наблюдений).
Для этого я долженсгенерируйте эти 34-точечные последовательные сегменты временных рядов из z (большой фрейм данных).
В настоящее время я делаю это так:
n1<-33:0
for(i in 1:nrow(actionlist))
{
crs[i,2]<-cor(z[actionlist$RPos[i]+n1,2],x[,2])
}
Когдаглядя на показания Rprof
вот что я получаю:
$by.self
self.time self.pct total.time total.pct
[.data.frame 0.68 25.37 0.98 36.57
.Call 0.22 8.21 0.22 8.21
cor 0.16 5.97 2.30 85.82
...etc
Похоже, что [.data.frame
занимает больше всего времени.В частности, я почти уверен, что именно эта часть: z[actionlist$RPos[i]+n1,2]
Как я могу ускорить (устранить необходимость?) Эту часть функции?
Я задавал подобный вопрос раньшеза исключением того, что вместо просмотра в ограниченном списке (actionlist
) я просматривал все возможные последовательные 34 наблюдения в z .Ответ был опубликован здесь, , но я не могу понять, как адаптировать его к ограниченному списку.
Любая помощь будет очень признательна!