通过在R中的已知值之间插值来填充NA组

时间:2017-08-03 07:38:40

标签: r interpolation

我正在努力研究如何在每小时温度矢量中填充一些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

1 个答案:

答案 0 :(得分:1)

动物园包中的这个功能似乎可以完成这项工作:

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"时。