Мои данные 988, 785 общ. из 3 переменных. Ниже приведен небольшой пример моих данных:Как ускорить/улучшить скользящую среднюю функцию?
Names <- c("Jack", "Jill", "John")
RawAccelData <- data.frame(
Sample = as.numeric(rep(1:60000, each = 3)),
Acceleration = rnorm(6000),
ID = rep((Names), each = 60000)
)
Частота дискретизации моего оборудования составляет 100 Гц. Я хочу рассчитать скользящее среднее Acceleration
за каждые ID
за период от 1 до 10 секунд. Я выполняю это, используя следующее:
require(dplyr)
require(zoo)
for (summaryFunction in c("mean")) {
for (i in seq(100, 1000, by = 100)) {
tempColumn <- RawAccelData %>%
group_by(ID) %>%
transmute(rollapply(Acceleration,
width = i,
FUN = summaryFunction,
align = "right",
fill = NA,
na.rm = T))
colnames(tempColumn)[2] <- paste("Rolling", summaryFunction, as.character(i), sep = ".")
RawAccelData <- bind_cols(RawAccelData, tempColumn[2])
}
}
Однако теперь мне нужно рассчитать переход на период от 1 до 10 минут. Я могу сделать это, используя приведенный выше код и подставляя в следующей строке:
for (i in seq(6000, 60000, by = 6000)) {
Однако, это занимает несколько часов, чтобы пробежать мой набор данных и результаты в RStudio на моем Mac (подробности ниже) висит! Есть ли способ, которым я могу: a) убрать вышеприведенный код или b) использовать другой пакет/метод, чтобы обеспечить более быстрый результат?
спасибо.
R version 3.2.3 (2015-12-10)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.5 (Yosemite)
locale:
[1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] zoo_1.7-12 dplyr_0.4.3
loaded via a namespace (and not attached):
[1] lazyeval_0.1.10 magrittr_1.5 R6_2.1.1 assertthat_0.1 parallel_3.2.3 DBI_0.3.1
[7] tools_3.2.3 Rcpp_0.12.2 grid_3.2.3 lattice_0.20-33
Меня интересует только среднее значение, так что спасибо за краткий и полезный ответ. – user2716568
В вашем ответе, пожалуйста, укажите полный код, который вы использовали для выполнения циклов for в 'Parallel'? Мой результат - это просто печать на консоли, а не добавление к 'RawAccelData', как код в моем вопросе. – user2716568
Вы правы, я пропустил некоторые подробности - я только что отредактировал в теле кода. – user20061