计算列的最后一百行的平均值

时间:2014-07-17 14:17:23

标签: r data.table

这是一个快速入侵,用于计算最后3行中x的平均值:

s <- data.table(x=c(.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.1))
s$avgx = NA
for(i in (4:10)) s$avgx[i] <- mean(s$x[(i-1):(i-3)])
s
      x avgx
 1: 0.1  NA
 2: 0.2  NA
 3: 0.3  NA
 4: 0.4  0.2 # 0.2 is average of x in previous 3 rows
 5: 0.5  0.3 # etc.
 6: 0.6  0.4
 7: 0.7  0.5
 8: 0.8  0.6
 9: 0.9  0.7
10: 0.1  0.8

此代码有效,但对于大型数据(例如,100k行,平均超过100或1000行)非常慢。

使用数据表还是数据框有快速的方法吗?

1 个答案:

答案 0 :(得分:3)

zoo::rollmean()完成了大部分内容,只是根据需要排列行:

> rollmean(s$x, 3, na.pad=TRUE, align="right")
 [1]  NA  NA 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.6

> means <- rollmean(s$x, 3, na.pad=TRUE, align="right")
> c(NA, means[-length(means)])
 [1]  NA  NA  NA 0.2 0.3 0.4 0.5 0.6 0.7 0.8