R:以第一个索引为起点并忽略 NA 的滚动标准差
R: rolling standard deviation with startpoint at the first index and ignore NA
如何计算向量的滚动标准偏差,使得
- 它忽略 NA
- 总是从第一个指数
计算滚动标准差
- 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))
如何计算向量的滚动标准偏差,使得
- 它忽略 NA
- 总是从第一个指数 计算滚动标准差
- 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))