我想知道是否有任何快速 R 函数可以计算向量上的滚动标准偏差,同时跳过所述向量中间的任何 NA 值,因此向量仍然与原始数据对齐?
包TTR
有runSD
,但如果向量中间有 NA,它会返回错误。
包fTrading
有rollVar
哪个有na.rm=TRUE
。取滚动方差的平方根给出标准偏差。但是,它实际上删除了 NA 值,这意味着滚动标准偏差不再与原始数据一致。
或者,有没有办法暂时删除 NA 值,然后在计算完成后将它们重新插入?
更新
请参阅将 NA 重新插入向量中。
我想知道是否有任何快速 R 函数可以计算向量上的滚动标准偏差,同时跳过所述向量中间的任何 NA 值,因此向量仍然与原始数据对齐?
包TTR
有runSD
,但如果向量中间有 NA,它会返回错误。
包fTrading
有rollVar
哪个有na.rm=TRUE
。取滚动方差的平方根给出标准偏差。但是,它实际上删除了 NA 值,这意味着滚动标准偏差不再与原始数据一致。
或者,有没有办法暂时删除 NA 值,然后在计算完成后将它们重新插入?
更新
请参阅将 NA 重新插入向量中。
这是你想要的?
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
下面的代码似乎运行良好。
使用 计算结果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.