我有一个短期电力负荷预测的数据。我必须清理数据,在没有数据的日期(和块)的数据中添加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
让我们创建一些伪数据:
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从第一个日期开始就丢失了,其他一些也丢失了):
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))]