计算运行中位数时缺少值?

时间:2012-08-27 22:54:52

标签: r missing-data

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

我在动物园套餐中遇到过rollmean和rollmedian,但遇到了问题,因为我的矢量中有一个NA。然后,我在那里读到那些动物园功能使用runmed,其中存在问题。

==例子==

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。

2 个答案:

答案 0 :(得分: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

或使用动物园中的na.*个功能之一(na.locfna.approxna.splinena.aggregate等) e.g。

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

答案 1 :(得分:1)

请参阅caTools package中的runquantile