我想知道是否有任何快速R函数可以计算向量上的滚动标准偏差,同时跳过所述向量中间的任何NA值,因此向量仍然与原始数据对齐?
包TTR
有runSD
,但如果向量中间有NA,则会返回错误。
包fTrading
的{{1}}包含rollVar
。取滚动方差的平方根给出标准偏差。但是,它实际上删除了NA值,这意味着滚动标准偏差不再与原始数据对齐。
或者,有没有办法暂时删除NA值,然后在计算完成后将其插回?
更新
答案 0 :(得分:2)
这是你在找什么?
library(zoo)
set.seed(1)
x <- sample(c(1:3, NA), replace = TRUE, size = 10)
r <- rollapply(data = x, width = 3, FUN = sd, fill = NA)
r
答案 1 :(得分:0)
以下代码似乎运作良好。
使用na.omit(X)
计算结果,然后使用下面的函数重新插入NA值。下面的代码使用平方根,但您可以使用任何函数,包括runSD
。
# Inserts NA back into result, based on a "template" (a vector with existing NA values)
ReNA <- function(NAtemplate,result)
{
NAtemplate[!is.na(NAtemplate)]<-result;NAtemplate
}
X=c(4,9,NA,16,NA)
X
[1] 4 9 NA 16 NA
result <- sqrt(na.omit(X))
X=ReNA(X,result)
X
[1] 2 3 NA 4 NA
# These values are the square root of the previous, with NA values inserted back in.