【问题标题】:In R, a rolling Standard Deviation that can skip over NA values? [closed]在 R 中,可以跳过 NA 值的滚动标准偏差? [关闭]
【发布时间】:2013-10-05 01:17:11
【问题描述】:

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

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

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

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

更新

Re-inserting NAs into a vector

【问题讨论】:

标签: r standard-deviation rolling-computation


【解决方案1】:

这是你要找的吗?

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

【讨论】:

  • 太棒了,这似乎运作良好。
  • 很高兴听到它奏效了。但是你不会得到太多的 sd 窗口宽度为 1。
  • 是的,我意识到了这一点,并改变了我的评论:)
【解决方案2】:

下面的代码似乎运行良好。

使用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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多