基于R中条件的滚动平均值

标签 r conditional-statements data.table moving-average

我想在 R 中使用移动平均函数 (rollmean)。示例数据:

x<-seq(1,48,by=1)
y<-c(rep(11,12), rep(12,12))
z<-data.frame(x,y)

我想计算每个 z[,"y"] 滞后 3 天的 z[,"x"] 的移动平均值(即 11 & 12) 并将它们填充到(新的)第三列,其中每个 z[,"y"] 的前两行由 NAs 指定。

最佳答案

使用 zoo 例如使用 data.table 包:

library(zoo)
library(data.table)
DT <- data.table(z)
DT[, roll_x := rollmeanr(x, 3, fill = NA), y]

当然,如果有一些缺失值,最好使用 rollapplyr :

DT[, roll_x := rollapplyr(x, 3, mean, fill = NA), y]

另一个会更快的包是caTools:

library(caTools)
DT[, roll_x := runmean(x, 3, align = 'right', endrule = 'NA'), by = y]

就数据框而言,这也适用:

transform(z, roll_x = ave(x, y, FUN = function(x) rollmeanr(x, 3, fill = NA)))

关于基于R中条件的滚动平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21604853/

相关文章:

r - 如何调整使用 R kableExtra::add_header_above 创建的表中的标签?

r - getURL(来自 RCurl 包)不能循环工作

java - 在net-beans上运行简单的 `Renjin`示例,Java代码为: "Using R within a Java project"

mysql - 根据多个条件获取结果

r - 如何在 R 中的 NA 之后生成虚拟变量

r - 将单列传递给 j 和从 data.table 中选择同一列有什么区别?

r - 如何使用 R 中 patchwork 包中的 inset_element() 函数嵌入 map

ruby - 在 RSpec 循环中有条件地应用标签

conditional-statements - Terraform:如果满足条件则设置可选的资源属性,否则不声明它

r - 根据列名合并data.tables