我想平滑时间序列以避免虚假抖动/错误。换句话说,我想做一些非常局部的稳健平滑。
我在动物园套餐中遇到过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。
答案 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.locf
,na.approx
,na.spline
,na.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
。