【发布时间】: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 <- "C:/Users/dfmcg/Documents/Thesisfiles/removedleapyears",因此这不是一个可重现的示例。刚刚发布了一个答案,没有给出数据,所以你必须弄清楚如何使它适应你的代码。它将使用 cupic 样条插值填充所有缺失的数据。阅读有关功能的信息,您可以根据您的特定需求对其进行自定义。如果没有,请获取 Rstudio。让生活更轻松。 -
我已经发布了数据和我的代码。它应该是可以重现的。
标签: r date dataframe time-series