【问题标题】:Fill in groups of NAs by interpolation between known values in R通过 R 中已知值之间的插值填充 NA 组
【发布时间】:2017-08-03 07:38:40
【问题描述】:

我正在努力研究如何在每小时温度向量中填充一些 NA。

超过 21885 个实例,我有 472 个随机分布的 NA。 NA应根据全天温度曲线的形状以合乎逻辑的方式填写。

它们按组分布。连续有 1 个孤立的 2、3、4 个或更多 NA 组。如果组很小,我会采用前面或后面的值,但是当组很大时,这将不起作用。

我认为我在最后一个已知值和下一个已知值之间进行插值是理想的,但我不知道如何做到这一点,因为我对 R 有点陌生。

提前感谢您抽出宝贵时间,非常感谢您提供有关解决此问题的功能或方法的任何建议。

示例:

enter image description here

    mydate <- c("2017-03-23 09:00:00 CET","2017-03-23 10:00:00 CET", "2017-03-23 11:00:00 CET" ,"2017-03-23 12:00:00 CET" ,"2017-03-23 13:00:00 CET" ,"2017-03-23 14:00:00 CET" ,"2017-03-23 15:00:00 CET", "2017-03-23 16:00:00 CET",
            "2017-03-23 17:00:00 CET", "2017-03-23 18:00:00 CET", "2017-03-23 19:00:00 CET" ,"2017-03-23 20:00:00 CET" ,"2017-03-23 21:00:00 CET" ,"2017-03-23 22:00:00 CET", "2017-03-23 23:00:00 CET" ,"2017-03-24 00:00:00 CET",
            "2017-03-24 01:00:00 CET", "2017-03-24 02:00:00 CET" ,"2017-03-24 03:00:00 CET" ,"2017-03-24 04:00:00 CET")
mytemp <- c(12, 13, 13, 15, 16, 15, NA, NA, NA, NA ,NA, NA, NA, NA, NA, NA, 10, 10,  9,  9)

mydataframe <- as.data.frame(cbind(mydate, mytemp))

包含所有实例的 CSV:https://wetransfer.com/downloads/a1806d8b04013e3ea4acee9bff746b1d20170803073703/8e6e4c

【问题讨论】:

    标签: r interpolation


    【解决方案1】:

    zoo 包中的这个函数似乎可以完成这项工作:

    zoo::na.fill(mytemp, fill = "extend")
    
    [1] 12.00000 13.00000 13.00000 15.00000 16.00000 15.00000 14.54545
    [8] 14.09091 13.63636 13.18182 12.72727 12.27273 11.81818 11.36364
    [15] 10.90909 10.45455 10.00000 10.00000  9.00000  9.00000
    

    编辑:this 问题及其答案使用zoo::na.approx 处理时间点不等距的更一般情况。一个区别是na.approx 不会扩展到前导和尾随 NA,而na.fill 会(当fill = "extend" 时)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      相关资源
      最近更新 更多