【问题标题】:rolling average to multiple variables in R using data.table package使用 data.table 包滚动平均值到 R 中的多个变量
【发布时间】: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]

标签: r data.table moving-average


【解决方案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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2021-02-10
    • 2022-01-13
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多