4

我想平滑时间序列以避免虚假的抖动/错误。换句话说,我想做一些非常局部的鲁棒平滑。

我在 zoo 包中遇到了 rollmean 和 rollmedian,但遇到了问题,因为我的向量中有一个 NA。然后我在某处读到那些动物园功能使用运行,这就是问题所在。

==例子==

median(c(1,1,1,2,2,2,7,NA,1,2,3,10,10,10),na.rm = TRUE)
runmed(c(1,1,1,2,2,2,7,NA,1,2,3,10,10,10),k=3)

第一行返回 2,但如果na.rm = TRUE不包括在内,则返回 NA。第二行返回Error in runmed(c(1, 1, 1, 2, 2, 2, 7, NA, 1, 2, 3, 10, 10, 10), k = 3) : NA/NaN/Inf in foreign function call (arg 1)。无法将 na.rm 参数添加到该行。

我怎样才能跑起来处理 NA?顺便说一句,rollmean 返回一个直到 NA 为止都是正确的向量,然后为之后的每个值返回 NA。

4

2 回答 2

6

利用na.omit

runmed(na.omit(c(1,1,1,2,2,2,7,NA,1,2,3,10,10,10)),k=3)
# [1]  1  1  1  2  2  2  2  2  2  3 10 10 10
#attr(,"k")
#[1] 3

或使用zoo ( , , , , 等)中的na.*功能之一,例如na.locfna.approxna.splinena.aggregate

runmed(na.locf(c(1,1,1,2,2,2,7,NA,1,2,3,10,10,10)),k=3)
#[1]  1  1  1  2  2  2  7  7  2  2  3 10 10 10
#attr(,"k")
#[1] 3
于 2012-08-27T23:01:34.307 回答
1

runquantilecaTools 包中查看。

于 2016-01-26T06:14:23.933 回答