使用R filter()函数处理缺失值

时间:2011-08-18 08:27:12

标签: r filter

我想使用R。

中的filter()函数处理缺失值

事实上,我希望计算X_t = 1/(2*T+1) * sum(X_i, i = (t-T)...(t+T)),其中(X_t)是包含缺失值的经典时间序列。 filter()在时间间隔[(t-T);(t+T)]上计算总和,但它不会给出NA以外的值的平均值。< / p>

有没有人知道如何处理它?<​​/ p>

3 个答案:

答案 0 :(得分:4)

试试这个:

library(zoo)
x <- 1:10
x[6] <- NA
rollapply(x, 3, mean, na.rm = TRUE)
## [1] 2.0 3.0 4.0 4.5 6.0 7.5 8.0 9.0

根据您想要获得的内容,您可能需要或不需要其他各种参数。请参阅?rollapply

已修订根据最新版本的rollapply更新了答案,以便进行简化。

答案 1 :(得分:1)

讽刺戏法对我来说并不适用。您必须操纵初始向量才能使其与大于1的Ks一起使用。这是我的代码:

k <- 1  ## Moving average over three points.
x <- c(rep(1,5), NA, rep(1,5)) # input vector
stmp <- c( rep(NA,k), x, rep(NA,k) )
smooth <- sapply((k+1):(k+length(x)), function(i){mean(x[(i-k):(i+k)], na.rm=TRUE)})

我还添加了一个函数语句,因此代码运行时没有错误。 希望它有所帮助:)

答案 2 :(得分:0)

如果您想要一个超过2k+1点的简单移动平均线,您可以这样做:

x <- c(rep(1,5), NA, rep(1,5))
k <- 1  ## Moving average over three points.
smooth <- sapply(1:length(x), mean(x[(i-k):(i+k)], na.rm=TRUE))
在这种情况下,

会产生所有1的向量。