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

标签 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 行的平均值),速度会非常慢。

有没有一种快速的方法来做到这一点,无论是使用数据表还是数据框?

最佳答案

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/

相关文章:

r - 从分组数据框的第一行创建相对值

按列值复制 data.table 中的行

读取分隔文件,其中分号作为分隔符出现在字符串中

R(数据表): computing mean after join in most efficient way

r - 如何检查列中的每一行是否落在其他两列的范围内?

r - 如何在knitr中获取 block 名称?

r - 在 ggplot2 中用 facets 绘制分布的分位数

返回单词的前 n 个字母

r - 如何计算弹性

regex - 将 data.table 中的所有空格和冒号替换为下划线 r