gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:15:41 26 4
gpt4 key购买 nike

我有一个简单的 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))

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

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 相比非常慢。

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

最佳答案

基于排除五个数字中的第三个数字(即计算的当前行)的解决方案。

library(dplyr)
library(zoo)

set.seed(124)

x <- data.frame("vals" = rnorm(3e04))
y <- x %>%
mutate(med5 = rollapply(data = vals,
width = 5,
FUN = function(x) median(x[-3], na.rm = TRUE),
align = "center",
fill = NA))

head(y)
# vals med5
# 1 -1.38507062 NA
# 2 0.03832318 NA
# 3 -0.76303016 0.1253147
# 4 0.21230614 0.3914015
# 5 1.42553797 0.4562678
# 6 0.74447982 0.4562678

关于r - 在没有当前行的情况下使用 rollaply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com