小编Akk*_*riz的帖子

在没有当前行的情况下使用 rollaply

我有一个简单的 data.frame,我想在其中滚动计算一些汇总统计数据。例如,五个观测值(2 个滞后、当前 1 个和 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))
Run Code Online (Sandbox Code Playgroud)

但是,我想从该计算中排除当前行。我发现了以下方法:

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))]))))
Run Code Online (Sandbox Code Playgroud)

如果我随后将前两个值设置为 ,这将达到我想要的效果NA

到目前为止一切顺利,唯一的问题是后一种方法与 rollapply 相比非常慢。

有没有办法以前者的速度达到后者的结果?

r apply dataframe dplyr rollapply

4
推荐指数
1
解决办法
1325
查看次数

标签 统计

apply ×1

dataframe ×1

dplyr ×1

r ×1

rollapply ×1