如何用零替换零之前的2个值和零之后的2个值

时间:2019-02-10 05:21:44

标签: r

我正在尝试插值时序中丢失的数据。丢失的数据为零,但问题在于丢失的数据之前和之后的值也无效。因此,我想从零之前的3个位置到最后一个零之后的3个位置进行插值。

这是我正在使用的R代码:

library(zoo)
x<- c(90,91,67,45,0,0,0,23,54,94,95)
fixed_x <- data.frame(fixed_pupil=na.approx(replace(pupil,pupil==0,NA)))

在此示例中,我想从91插值到94。

我的猜测是,执行此操作的最简单方法是将零序列前后的2个值替换为零,但是我也不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

这将替换之前和之后的两个值。

x <- c(90,91,67,45,0,0,0,23,54,94,95)
zeros <- which(x == 0)
for ( i in zeros ) {
    if ( i - 2 > 0 ) {
        x[c(i-2, i-1)] <- 0
        x[c(i+2, i+1)] <- 0
    }
}
> x
 [1] 90 91  0  0  0  0  0  0  0 94 95

就插值而言,将需要更多数据,但是ts()具有处理缺失值的选项。在这种情况下,您可能需要替换为NA