R:以第一个索引为起点并忽略 NA 的滚动标准差

R: rolling standard deviation with startpoint at the first index and ignore NA

如何计算向量的滚动标准偏差,使得

  1. 它忽略 NA
  2. 总是从第一个指数
  3. 计算滚动标准差
  4. returns 一个与输入向量长度相同的滚动标准差向量

?

示例:

set.seed(123)
x <- c(NA, rnorm(5), NA, rnorm(5))

结果会return

sd(x[1:1],na.rm=T) = NA
sd(x[1:2],na.rm=T) = NA
sd(x[1:3],na.rm=T) = 0.2335561
sd(x[1:4],na.rm=T) = 1.140186
sd(x[1:5],na.rm=T) = 0.9355676
sd(x[1:6],na.rm=T) = 0.8110218
sd(x[1:7],na.rm=T) = 0.8110218
sd(x[1:8],na.rm=T) = 0.9550024
sd(x[1:9],na.rm=T) = 0.8718094
sd(x[1:10],na.rm=T) = 1.009344
sd(x[1:11],na.rm=T) = 0.9928846
sd(x[1:12],na.rm=T) = 0.9537841

您可以使用 zoo 中的 rollapplyr

zoo::rollapplyr(x, seq_along(x), sd, na.rm = TRUE)
#[1]   NA    NA 0.234 1.140 0.936 0.811 0.811 0.955 0.872 1.009 0.993 0.954

或者在 base R 中的手动方式,这比 zoo 方法慢。

sapply(seq_along(x), function(i) sd(x[1:i], na.rm = TRUE))