0

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

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

fTradingrollVar哪个有na.rm=TRUE。取滚动方差的平方根给出标准偏差。但是,它实际上删除了 NA 值,这意味着滚动标准偏差不再与原始数据一致。

或者,有没有办法暂时删除 NA 值,然后在计算完成后将它们重新插入?

更新

请参阅将 NA 重新插入向量中。

4

2 回答 2

3

这是你想要的?

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
于 2013-09-29T00:11:03.587 回答
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.
于 2013-09-29T00:30:47.753 回答