У меня есть фрейм данных, основанный на данных GPS, где я ищу для создания переменных скользящей суммы нескольких длин.Я могу создать их, используя число dplyr::mutate
library(dplyr)
library(zoo) # rollsumr
df_1 %<>%
mutate(1min = rollsumr(Dist, 600, fill = NA),
2min = rollsumr(Dist, 1200, fill = NA),
3min = rollsumr(Dist, 1800, fill = NA),
4min = rollsumr(Dist, 2400, fill = NA),
5min = rollsumr(Dist, 3000, fill = NA),
6min = rollsumr(Dist, 3600, fill = NA),
7min = rollsumr(Dist, 4200, fill = NA),
8min = rollsumr(Dist, 4800, fill = NA),
9min = rollsumr(Dist, 5400, fill = NA),
10min = rollsumr(Dist, 6000, fill = NA))
Но мне интересно, есть ли способ создать их все одновременно, используя mutate_at
?Я попробовал себя, но не смог справиться.
У меня есть отдельный скрипт при работе с очень большими наборами данных, который делает это с таблицами данных, но dplyr
и mutate
быстрее для небольших наборов данных.
setDT(df_1)[paste0(1:15) := lapply((1:15)*600, function(x) rollsumr(Dist, x, fill = NA))][]
Пример данных
> dput(head(df_1,40))
structure(list(Seconds = c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7,
0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2,
2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3,
3.4, 3.5, 3.6, 3.7, 3.8, 3.9), Dist = c(0, 0.122, 0.116, 0.122,
0.127, 0.133, 0.144, 0.143, 0.143, 0.133, 0.13, 0.133, 0.139,
0.146, 0.155, 0.164, 0.159, 0.16, 0.155, 0.156, 0.155, 0.158,
0.146, 0.148999999999999, 0.154, 0.159, 0.158, 0.166, 0.168999999999999,
0.156, 0.151, 0.145, 0.152, 0.163999999999999, 0.169, 0.17, 0.169,
0.177, 0.177999999999999, 0.175)), row.names = c(NA, 40L), class = "data.frame")
PS - Один кадр данных будет содержать около 70000 строк данных, и я не был уверен, как дать его воспроизводимую выборку?