2011-08-18 45 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)}) 

我還添加了一個函數語句使代碼運行沒有錯誤。 希望它有助於:)