2011-08-18 77 views
4

缺失值我想处理在R.处理与R滤光器()函数

事实上使用filter()功能缺失值,我希望计算X_t = 1/(2*T+1) * sum(X_i, i = (t-T)...(t+T))其中(X_t)是包含缺失一个经典的时间序列值。 filter()在时间间隔[(t-T);(t+T)]上计算总和,但它不给出的平均值的值不包括NAs。

有没有人有任何想法如何处理呢?

+0

请向我们提供样本数据和迄今使用的代码。这会让你更容易回答你的问题。 – Andrie

回答

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)) 

这导致在此情况下,所有的人的载体。

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更新了答案。

+0

非常感谢您的回答。这正是我所期待的! – Yaya

1

该sapply把戏并不适合我。你必须操纵初始向量得到它与Ks的合作大于1。这里是我的代码:

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)}) 

我还添加了一个函数语句使代码运行没有错误。 希望它有助于:)