将缺失值(-999)的日期添加到年份的顶部和底部

时间:2016-09-22 18:46:21

标签: r date dataframe time-series

我有几个小时的时间序列,我正在与之合作。有没有办法将日期和缺失值仅添加到时间序列开始和结束的年初和年末?因此,对于发布的数据,我想将数据填充到1990年初和2008年底。我能看到的唯一方法是使用无限数量的循环。我已经查看了dplyr,zoo和seq来完成这项任务,但是看不出如何只是以简洁的方式填充数据的年份。我想制作一个循环,它将适用于我所有不同的时间序列,因为它改变了每个时间序列的脚本。我是R的新手,所以任何帮助都会有所帮助!

我的数据:

  

日期O3
  9/15/1990 0:00 24
  9/15/1990 1:00 28
  9/15/1990 2:00 26
  9/15/1990 3:00 25
  9/15/1990 4:00 -999
  9/15/1990 5:00 18
  9/15/1990 6:00 17

数据的结尾如下所示:

  

1/31/2008 19:00 -999
  1/31/2008 20:00 -999
  1/31/2008 21:00 -999
  1/31/2008 22:00 -999
  1/31/2008 23:00 -999

这是我目前的剧本:

library(openair)
library(plyr)
filedir <- "C:/Users/dfmcg/Documents/Thesisfiles/removedleapyears"
myfiles <- c(list.files(path = filedir))
paste(filedir, myfiles, sep = '/')
npsfiles <- c(paste(filedir, myfiles,sep = '/'))

for (i in npsfiles[1:28]) {

  timeozone <- import(i, date ="date", date.format = "%m/%d/%Y %H", header = TRUE, na.strings = "-999")

 ts <- seq.POSIXt(as.POSIXct("1990-01-01 0:00",'%Y-%m-%d %H'), as.POSIXct("2015-12-31 23:00",'%Y-%m-%d %H'), by="hour")

  ts <- seq.POSIXt(as.POSIXlt("1990-01-01 0:00:00"), as.POSIXlt("2015-12-31 0:00:00"), by="hour")
  ts <- format.POSIXct(ts,'%Y-%m-%D %H')

  df <- data.frame(date=ts)

  data_with_missing_times <- join(df,timeozone)
}

1 个答案:

答案 0 :(得分:0)

使用zoo。用NA替换-999。然后将数据转换为zoo对象。使用na.spline即yourdata$O3.zoo<-na.spline(yourdata$O3.zoo,method="fmm")。只需将数据剪辑到您想要的年份。