【问题标题】:Add dates with missing values (-999) to top and bottom of the year将缺失值 (-999) 的日期添加到年份的顶部和底部
【发布时间】:2017-01-31 11:36:59
【问题描述】:

我正在处理几个每小时的时间序列。有没有办法将日期和缺失值仅添加到时间序列开始和结束的年份的开始和结束?因此,对于发布的数据,我想将数据填充到 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
1990 年 9 月 15 日 4:00 -999
9/15/1990 5:00 18
9/15/1990 6:00 17

数据的结尾是这样的:

2008 年 1 月 31 日 19:00 -999
2008 年 1 月 31 日 20:00 -999
2008 年 1 月 31 日 21:00 -999
2008 年 1 月 31 日 22:00 -999
2008 年 1 月 31 日 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)
}

【问题讨论】:

  • 如果您想要一个好的答案,如果您提供一个可重现的示例,这对每个人都非常有帮助。阅读此stackoverflow.com/questions/5963269/…
  • 脚本已添加,谢谢!
  • 没有其他人,但您将拥有目录filedir &lt;- "C:/Users/dfmcg/Documents/Thesisfiles/removedleapyears",因此这不是一个可重现的示例。刚刚发布了一个答案,没有给出数据,所以你必须弄清楚如何使它适应你的代码。它将使用 cupic 样条插值填充所有缺失的数据。阅读有关功能的信息,您可以根据您的特定需求对其进行自定义。如果没有,请获取 Rstudio。让生活更轻松。
  • 我已经发布了数据和我的代码。它应该是可以重现的。

标签: r date dataframe time-series


【解决方案1】:

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

【讨论】:

  • 这只是用插值替换值。它不会添加缺失值来填充年份。
  • 您要添加缺失的日期吗?
  • 是的,直到数据开始和结束的年份的顶部和底部
  • 只需在一年的第一天和最后一天使用seq.POSIXt()。使用by 参数并指定小时。将此对象转换为动物园对象并使用merge 将其与您的数据合并。
  • 这正是我目前在我的代码中所拥有的。往上看。但是,当我合并时,它会覆盖当前数据。我如何在顶部和底部添加数据,同时将数据保留在两者之间?
猜你喜欢
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 2020-02-05
相关资源
最近更新 更多