【发布时间】:2018-05-21 19:54:45
【问题描述】:
我有一个简单的 data.frame,我想在其中滚动计算一些汇总统计信息。例如,一个包含五个观测值(2 个滞后,当前一个和 2 个提前)的窗口上的滚动中位数是通过
library(dplyr)
x <- data.frame("vals" = rnorm(3e04))
y <- x %>%
mutate(med5 = rollapply(data = vals,
width = 5,
FUN = median,
align = "center",
fill = NA,
na.rm = TRUE))
但是,我想从该计算中排除当前行。我找到了以下方法:
z <- x %>%
mutate(N=1:n()) %>%
do(data.frame(., prmed = sapply(.$N, function(i) median(.$vals[.$N %in% c((i - 2):(i - 1), (i + 1):(i + 2))]))))
如果我随后将前两个值设置为 NA,这就是我想要的。
到目前为止一切顺利,唯一的问题是后一种方法与 rollapply 相比非常慢。
有没有办法以前者的速度达到后者的结果?
【问题讨论】:
标签: r dataframe dplyr apply rollapply