У меня есть большой фрейм данных (названный г), который выглядит следующим образом:R: Как ускорить эту функцию?
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-наблюдение в г. Ответ был опубликован here,, но я не могу понять, как его адаптировать к ограниченному списку.
Любая помощь будет очень признательна!
Вам будет проще помочь вам, если вы опубликуете какой-нибудь воспроизводимый код и тестовые данные. – Andrie
Кроме того, было бы проще (для меня особенно!), Если бы вы использовали ту же терминологию в этом, что и в предыдущем ответе. И есть ли какая-то причина, по которой вам нужны 'z' и' x' для data.frames ?? Весьма расточительно многократно подмножать то, что вам не нужно, так что, например, вы можете легко взять 'x [, 2]' вне цикла, выполнив 'x2 <- x [, 2]' один раз снаружи и затем ссылаясь на этот вектор в цикле как 'x2'. Точно так же индексирование с использованием '$ Rpos [i]' вообще не требуется, если 'Rpos' сам работает от' 1: nrow (z) '... –
Да, вы определенно правы, в будущем я буду использовать согласованные терминология.Я буду помнить о подмножестве. –