使用 data.table 包对 R 中的多个变量进行滚动平均

rolling average to multiple variables in R using data.table package

我想获得我拥有的每个数字变量的滚动平均值。使用 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]

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

我想为每个受体获得 "AvgConc"、"TotDep"、"DryDep" 和 "WetDep" 的 5 小时滚动方式。

根据你的描述,你想要这样的东西,它类似于 one of the data.table 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")]

现在,可以使用 data.table 包中的 frollmean 函数来完成此操作。

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

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


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