R 将插值函数限制为NA值

R 将插值函数限制为NA值,r,interpolation,zoo,spline,R,Interpolation,Zoo,Spline,我正在尝试使用na.spline,zoo软件包的一部分,用三次样条插值替换某些导入速度数据中的na值 na.样条曲线正在按预期修改na值;但是,它也在修改最初等于0的值 ex <- data.frame(speed) ex$speed2 <- na.spline(ex$speed) 是否有人见过类似的问题或有替代方法用插值数据替换NA值?内部执行此操作(不涉及动物园): 还请注意,这将使与输入中的零值对应的输出组件归零: na.fill(y != 0, 1) * na.spline

我正在尝试使用
na.spline
zoo
软件包的一部分,用三次样条插值替换某些导入速度数据中的
na

na.样条曲线
正在按预期修改
na
值;但是,它也在修改最初等于0的值

ex <- data.frame(speed)
ex$speed2 <- na.spline(ex$speed)
是否有人见过类似的问题或有替代方法用插值数据替换
NA
值?

内部执行此操作(不涉及动物园):

还请注意,这将使与输入中的零值对应的输出组件归零:

na.fill(y != 0, 1) * na.spline(y)

请参见此处:-虽然
na.spline
应该可以工作。实际上,查看示例数据,spline工作得很好。您是否尝试过绘制这两组数据?在大多数应用中,我对结果都很满意,但我必须使用结果执行一些车辆模拟,并且我需要
0
速度精确到
0
。虽然类似于
1.6 e-21
的东西非常接近
0
,但是在模拟中
switch=ON
switch=OFF
之间的区别是不好的。尝试
round(na.spline(df$speed),6)我同意@史蒂文波普尔-你需要为你的输出设定一个容忍度,通过它你可以确定在你认为有效的0之前,0个物体是多么的接近。
y <- c(NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.661698, 3.107128, 
7.319669, 10.800864, 17.855491, 18.250267, 28.587002, 36.405397, 
38.467383, 38.685956, 43.917737, 40.829615, 43.519173, 45.597497, 
43.252656, 45.581646, 48.258325, 48.269969, 50.905045, 53.258165, 
58.39137, 59.27844, 58.720518, 56.933438, 62.062116, 59.860849, 
60.183378)

x <- xout <- seq_along(y)
na <- is.na(y)

splinefun(x[!na], y[!na])(xout)
 [1]  8.639280e-06  0.000000e+00  0.000000e+00  0.000000e+00  3.388132e-21
 [6]  0.000000e+00 -2.710505e-20  0.000000e+00  4.336809e-19  0.000000e+00
[11]  6.938894e-18  0.000000e+00  0.000000e+00  2.661698e+00  3.107128e+00
[16]  7.319669e+00  1.080086e+01  1.785549e+01  1.825027e+01  2.858700e+01
[21]  3.640540e+01  3.846738e+01  3.868596e+01  4.391774e+01  4.082961e+01
[26]  4.351917e+01  4.559750e+01  4.325266e+01  4.558165e+01  4.825832e+01
[31]  4.826997e+01  5.090505e+01  5.325816e+01  5.839137e+01  5.927844e+01
[36]  5.872052e+01  5.693344e+01  6.206212e+01  5.986085e+01  6.018338e+01
na.fill(y != 0, 1) * na.spline(y)