2015-07-17 7 views
4

Я хотел бы получить скользящее среднее для каждой из числовых переменных, которые у меня есть. Используя пакет data.table, я знаю, как вычислить для одной переменной. Но как мне пересмотреть код, чтобы он мог обрабатывать сразу несколько переменных, а не пересматривать имя переменной и повторять эту процедуру несколько раз? Благодарю.Скользящий средний для нескольких переменных в R с использованием пакета данных.table

Предположим, что у меня есть другие числовые переменные, называемые «V2», «V3» и «V4».

require(data.table) 
setDT(data) 
setkey(data,Receptor,date) 
data[ , `:=` ('RollConc' = rollmean(AvgConc, 48, align="left", na.pad=TRUE)) , by=Receptor] 

копию моих данных выборки можно найти по адресу: https://drive.google.com/file/d/0B86_a8ltyoL3OE9KTUstYmRRbFk/view?usp=sharing

Я хотел бы получить 5-часовой прокат средства "AvgConc", "TotDep", "DryDep", и «WetDep "по каждому рецептору.

+0

Пожалуйста показать некоторые примеры 'data' – akrun

+0

данных образца закачанные. Благодарю. – Vicki1227

+1

Спасибо, но у меня есть ограничения для загрузки данных. Кто-то попробует. – akrun

ответ

7

Из вашего описания вы хотите что-то вроде этого, который похож на один из примеров, которые можно найти в one of the new vignettes:

library(data.table) 
set.seed(42) 
DT <- data.table(x = rnorm(10), y = rlnorm(10), z = runif(10), g = c("a", "b"), key = "g") 
library(zoo) 
DT[, paste0("ravg_", c("x", "y")) := lapply(.SD, rollmean, k = 3, na.pad = TRUE), 
    by = g, .SDcols = c("x", "y")] 
+0

Работало! Спасибо большое! – Vicki1227

+0

Еще один вопрос ... Я вижу, что код вычислял мои данные, но результаты не сохраняются как переменные ... Как сохранить эти скользящие средние в новый dataframe как переменные? – Vicki1227

+0

Не понимаю. Они сохраняются в виде столбцов таблицы данных. Почему вы хотите, чтобы они были в другой таблице данных? Если нужно, вы всегда можете подмножить таблицу данных. – Roland