如何将NA添加到某些日期不可用的数据?

时间:2015-02-22 19:31:57

标签: r time-series forecasting

我有一份短期电力负荷预测数据。我必须清理数据,在没有数据的日期(和块)的数据中添加NA。 例如:第一种情况:缺少一些日期:

         data<-data.frame(date=c("2014-01-01","2014-01-02","2014-01-04"),value=c(1,2,3))

请注意2014-01-03缺失。所以我想添加一个具有此日期的行,并且NA对应于此日期的列。

所需的输出数据是:

        out_data<-data.frame(date=c("2014-01-01","2014-01-02","2014-01-03","2014-01-04"),value=c(1,2,NA,3))

第二种情况:日期中缺少一些块:

1,2,3,4,5,7,9,10

请注意,缺少6,8个区块。所以我想为这些块添加一行(6,8),并且NA对应于这些块的列。

第一个问题是如何找出丢失的日期,块。一旦想到如何添加NA,如上所述。我试图用循环来完成这个,但如果有人有更好的方法或知道一些有效的包,请帮助。

编辑 - 我使用的软件是R

由于

1 个答案:

答案 0 :(得分:1)

如果没有可重复的例子,很难知道,但我试了一下:

案例1

让我们创建一些虚拟数据:

days <- c(1,2,4:6,9)
yourDates <- as.Date(paste(2014, 1, days, sep = "-"))
set.seed(111)
data <- data.frame(date= yourDates, col1 = rnorm(6), col2 = sample(letters, 6))

指定上一个所需日期:

enddate <- max(data$date) 

创建一个新的数据框,其中包含缺失日期的NA:

df  <-  merge(data, data.frame(date = seq(min(yourDates),
              as.Date(enddate), 1)), all.y = T)

# if you want to replace the dates where you have no records with NA: 
df$date[!df$date %in% yourDates]  <-  NA

情况2

根据您的日期和区块创建完整数据:

data2  <- expand.grid(block = 1:10, date = yourDates)

带有间隙的数据(第6天,第8天,第8天缺失,其他一些也缺失):

data2.gaps  <- data2[-c(6,8, 15, 29),]
# and put NAs where block is missing:
data2$block  <- data2.gaps$block[match(interaction(data2$block, data2$date), 
                                       interaction(data2.gaps$block, data2.gaps$date))]