В данный момент я работаю с большим фреймом данных и должен создать скользящую сумму нескольких длин для ряда переменных.У меня есть рабочий метод через data.table
, но для прохождения через одну переменную требуется довольно много времени (примерно 50 минут на переменную).
Я потратил некоторое время на улучшение сценария, чтобы ускорить его, но у меня закончились идеи.У меня нет опыта в C ++, но я подумал, что пакет Rcpp
может быть вариантом.Я сам изучил это, но не смог придумать ничего полезного.
Это мой data.table
скрипт для одной переменной
df_td <- setDT(df_1, key=c("Match","Name"))[,by=.(Match, Name), paste0("Period_", 1:10)
:= mclapply((1:10)*600, function(x) rollsumr(Dist, x, fill = NA))][]
Я использовал parallel::mclapply
, что помогло, но работа все равно занимает довольно много времени.
> dput(head(df_1, 20))
structure(list(Match = c("Bath_A", "Bath_A", "Bath_A", "Bath_A",
"Bath_A", "Bath_A", "Bath_A", "Bath_A", "Bath_A", "Bath_A", "Bath_A",
"Bath_A", "Bath_A", "Bath_A", "Bath_A", "Bath_A", "Bath_A", "Bath_A",
"Bath_A", "Bath_A"), Name = c("Jono Lance", "Jono Lance", "Jono Lance",
"Jono Lance", "Jono Lance", "Jono Lance", "Jono Lance", "Jono Lance",
"Jono Lance", "Jono Lance", "Jono Lance", "Jono Lance", "Jono Lance",
"Jono Lance", "Jono Lance", "Jono Lance", "Jono Lance", "Jono Lance",
"Jono Lance", "Jono Lance"), Dist = c(0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), Dist_HS = c(0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), Dist_SD = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
> str(df_1)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 26533771 obs. of 5 variables:
$ Match : chr "Bath_A" "Bath_A" "Bath_A" "Bath_A" ...
$ Name : chr "Jono Lance" "Jono Lance" "Jono Lance" "Jono Lance" ...
$ Dist : num 0 0 0 0 0 0 0 0 0 0 ...
$ Dist_HS: num 0 0 0 0 0 0 0 0 0 0 ...
$ Dist_SD: num 0 0 0 0 0 0 0 0 0 0 ...
Будем весьма благодарны за любые предложения, как это можно ускорить