我正在尝试插值时序中丢失的数据。丢失的数据为零,但问题在于丢失的数据之前和之后的值也无效。因此,我想从零之前的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个值替换为零,但是我也不知道该怎么做。
答案 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
。