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

Posted

技术标签:

【中文标题】使用 data.table 包滚动平均值到 R 中的多个变量【英文标题】:rolling average to multiple variables in R using data.table package 【发布时间】:2015-10-07 13:30:07 【问题描述】:

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

【问题讨论】:

请举个例子data 样本数据已上传。谢谢。 谢谢,但我有下载数据的限制。有人会尝试的。 谢谢!效果很好。 无论如何添加一个数字变量“事件”来标记每个受体的每个滚动平均值计算?例如,对于 Receptor 1,第一个滚动平均值将标记为 Event[1],最后计算的滚动平均值将是 Event[n]?而对于Receptor 2,rollingmeans也会被标记为Event j in 1 to length[rollingmean] 【参考方案1】:

根据您的描述,您想要这样的东西,这类似于可以在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 的列。为什么要将它们放在不同的 data.table 中?如果必须,您始终可以对 data.table 进行子集化。 以后可以在data.table#626实施后改进 无论如何添加一个数字变量“事件”来标记每个受体的每个滚动平均值计算?例如,对于 Receptor 1,第一个滚动平均值将标记为 Event[1],最后计算的滚动平均值将是 Event[n]?而对于Receptor 2,同样地,rollingmeans也会被标记为Event j in 1 to length[rollingmean]【参考方案2】:

现在,可以为此使用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")

【讨论】:

以上是关于使用 data.table 包滚动平均值到 R 中的多个变量的主要内容,如果未能解决你的问题,请参考以下文章

R data.table 滑动窗口

使用带有data.table的滚动功能

R语言data.table进行滚动数据连接,滚动联接通常用于分析涉及时间的数据实战(动画说明滚动数据连接的形式):rolling joins data.table in R

是否有任何包或方法可以将 data.table R 代码转换/发送为 sql 查询以发送到数据库?

滚动连接R中的data.table

R语言进行数据聚合统计(Aggregating transforms)实战:使用R原生方法data.tabledplyr等方案计算分组均值并添加到可视化结果中