【问题标题】:Interpolate value only for short gap仅对短间隙进行插值
【发布时间】:2018-01-23 15:49:07
【问题描述】:

我的矢量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

【问题讨论】:

    标签: r interpolation missing-data base zoo


    【解决方案1】:
    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
    

    【讨论】:

      猜你喜欢
      • 2021-09-12
      • 2016-04-20
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多