使用data.table包将R平均滚动到R中的多个变量

Vic*_*227 8 r moving-average data.table

我想得到我所拥有的每个数值变量的滚动平均值.使用data.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]
Run Code Online (Sandbox Code Playgroud)

我可以在以下网址找到我的示例数据的副本:https: //drive.google.com/file/d/0B86_a8ltyoL3OE9KTUstYmRRbFk/view?usp=sharing

我想通过每个受体获得"AvgConc","TotDep","DryDep"和"WetDep"的5小时滚动方式.

Rol*_*and 12

根据您的描述,您需要这样的东西,这类似于可以在其中一个新的插图中找到的一个示例:

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")]
Run Code Online (Sandbox Code Playgroud)


Sur*_*ren 10

现在,可以为此使用包中的frollmean函数data.table

library(data.table)    
xy <- c("x", "y")
DT[, (xy):= lapply(.SD, frollmean, n = 3, fill = NA, align="center"), 
                                   by = g, .SDcols =  xy]
Run Code Online (Sandbox Code Playgroud)

在这里,我用滚动平均值替换 x 和 y 列。


# Data
set.seed(42)
DT <- data.table(x = rnorm(10), y = rlnorm(10), z = runif(10), 
                                g = c("a", "b"), key = "g")
Run Code Online (Sandbox Code Playgroud)