在R中,滚动标准偏差可以跳过NA值吗?

时间:2013-09-28 23:34:57

标签: r standard-deviation rolling-computation

我想知道是否有任何快速R函数可以计算向量上的滚动标准偏差,同时跳过所述向量中间的任何NA值,因此向量仍然与原始数据对齐?

TTRrunSD,但如果向量中间有NA,则会返回错误。

fTrading的{​​{1}}包含rollVar。取滚动方差的平方根给出标准偏差。但是,它实际上删除了NA值,这意味着滚动标准偏差不再与原始数据对齐。

或者,有没有办法暂时删除NA​​值,然后在计算完成后将其插回?

更新

请参阅Re-inserting NAs into a vector

2 个答案:

答案 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.