仅针对短间隙插值

时间:2018-01-23 15:49:08

标签: r interpolation missing-data base zoo

我的矢量a <- c(2,0,0,1,0, 3, 0, 0,0,0,5,6) 零表示缺失值

我想仅在0的连续性小于4

时插入缺失值

我正在寻找一个允许我执行此功能的功能

希望的输出是[1] 2.00 1.67 1.33 1.00 2.00 3.00 0.00 0.00 0.00 0.00 5.00 6.00

1 个答案:

答案 0 :(得分:3)

library(zoo)
temp1 = na.approx(replace(a, a == 0, NA))
temp2 = inverse.rle(with(rle(a), list(values = replace(values, values == 0 & lengths < 4, NA),
                                      lengths = lengths)))
replace(temp2, is.na(temp2), temp1[is.na(temp2)])
# [1] 2.000000 1.666667 1.333333 1.000000 2.000000 3.000000 0.000000 0.000000
# [9] 0.000000 0.000000 5.000000 6.000000

以下(由G.Grothendieck评论)更好

temp = na.approx(object = replace(a, a == 0, NA), maxgap = 3)
replace(temp, is.na(temp), 0)
# [1] 2.000000 1.666667 1.333333 1.000000 2.000000 3.000000 0.000000 0.000000
# [9] 0.000000 0.000000 5.000000 6.000000