快速滚动平均值+总结

AF7

在R中,我尝试使用不同的窗口宽度对大型矢量(最多40万个元素)进行非常快速的滚动平均,然后针对每个窗口宽度按每年的最大值汇总数据。希望下面的例子很清楚。我尝试了几种方法,到目前为止,最快的方法似乎是使用roll_mean软件包RcppRoll中的运行平均值,并aggregate选择最大值。请注意,内存需求是一个问题:下面的版本需要很少的内存,因为它一次只执行一次滚动平均值和汇总;这是首选。

#Example data frame of 10k measurements from 2001 to 2014
n <- 100000
df <- data.frame(rawdata=rnorm(n),
                 year=sort(sample(2001:2014, size=n, replace=TRUE))
                 ) 

ww <- 1:120 #Vector of window widths

dfsumm <- as.data.frame(matrix(nrow=14, ncol=121))
dfsumm[,1] <- 2001:2014
colnames(dfsumm) <- c("year", paste0("D=", ww))

system.time(for (i in 1:length(ww)) {
  #Do the rolling mean for this ww
  df$tmp <- roll_mean(df$rawdata, ww[i], na.rm=TRUE, fill=NA)
  #Aggregate maxima for each year
  dfsumm[,i+1] <- aggregate(data=df, tmp ~ year, max)[,2]
}) #28s on my machine
dfsumm

这将提供所需的输出:adata.frame具有15行(2001年至2015年)和120列(窗口宽度),其中包含每个ww和每年的最大值。

但是,计算仍然需要太长时间(因为我必须计算成千上万个)。我尝试使用其他选项(即dplyr和)data.table,但由于我对这些软件包的了解不足,因此无法更快地找到某些东西。

使用单核(代码已经在其他地方并行化),哪种方法是最快的方法

罗兰

内存管理,即分配和复制,正在用您的方法杀死您。

这是一个data.table方法,通过引用进行分配:

library(data.table)
setDT(df)
alloc.col(df, 200) #allocate sufficient columns

#assign rolling means in a loop
for (i in seq_along(ww)) 
  set(df, j = paste0("D", i),  value = roll_mean(df[["rawdata"]], 
                                        ww[i], na.rm=TRUE, fill=NA))

dfsumm <- df[, lapply(.SD, max, na.rm = TRUE), by = year] #aggregate

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R中的汇总结果的滚动平均值

来自分类Dev

分组滚动平均值

来自分类Dev

条件滚动平均值

来自分类Dev

sqlite滚动平均值

来自分类Dev

如何制作一个在终止和打印结果之前接受输入和总结+计算平均值的聊天机器人?

来自分类Dev

绘图滚动平均值和数据

来自分类Dev

R组数据的滚动平均值

来自分类Dev

python panda计算滚动平均值

来自分类Dev

每周平均值,滚动年份

来自分类Dev

Groupby和滚动平均值

来自分类Dev

SQL中的滚动移动平均值

来自分类Dev

计算n天滚动平均值

来自分类Dev

如何获得居中滚动平均值?

来自分类Dev

滚动平均值图例标签

来自分类Dev

计算滚动 180 天平均值

来自分类Dev

R语言-栏平均滚动平均值

来自分类Dev

Python中滚动相关数据框的滚动平均值?

来自分类Dev

如何快速有效地计算平均值(移动平均值)?

来自分类Dev

dplyr按组/ id的滚动平均值(移动平均值)

来自分类Dev

使用Python查找分散数据集的平均值(或滚动平均值)

来自分类Dev

R:快速计算几何平均值

来自分类Dev

“实时”流的简单移动平均值-快速实施

来自分类Dev

条件平均值(“平均值”)

来自分类Dev

条件平均值(“平均值”)

来自分类Dev

平均值的平均值

来自分类Dev

如何计算C#数组列表的滚动平均值?

来自分类Dev

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

来自分类Dev

重新开始的SQL滚动平均值

来自分类Dev

计算熊猫的连续滚动平均值作为数组函数?