【发布时间】:2015-05-14 01:34:47
【问题描述】:
有没有更优雅的方法来获取当前到前 n 行的平均值?例如,
x=replicate(3, rnorm(20))
我想要的是获得每行 + 2 行之前的第 2 列的平均值。我目前这样做的方式是 1)创建一个空列 2)循环遍历每一行并从前 2 行获取值,意思是它,然后将其存储在新列中。这很乏味,所以我想知道是否有更清洁、更快的方法?提前致谢。阿迪
【问题讨论】:
有没有更优雅的方法来获取当前到前 n 行的平均值?例如,
x=replicate(3, rnorm(20))
我想要的是获得每行 + 2 行之前的第 2 列的平均值。我目前这样做的方式是 1)创建一个空列 2)循环遍历每一行并从前 2 行获取值,意思是它,然后将其存储在新列中。这很乏味,所以我想知道是否有更清洁、更快的方法?提前致谢。阿迪
【问题讨论】:
试试filter - 你所做的是滚动平均值。
filter(x[,2], rep(1/3,3), sides=1)
【讨论】:
library(zoo) ; rollapply(x[,2], 2, mean, na.pad = 1, align="right")
感谢 thelatemail,我想要的是滚动平均值。我找到了解决方案。
library(zoo)
x=replicate(3, rnorm(20))
rollapply(x[,2], 2, mean, na.pad = 1, align="right")
【讨论】:
filter(x[,2], rep(1/2,2), sides=1)。 rollapply 是同类逻辑的更通用版本。很高兴看到你把它整理出来。