以下是计算最后 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 行的平均值),速度会非常慢。
有没有一种快速的方法来做到这一点,无论是使用数据表还是数据框?
最佳答案
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
关于r - 计算一列最后一百行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24806077/