我有一份短期电力负荷预测数据。我必须清理数据,在没有数据的日期(和块)的数据中添加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
由于
答案 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))]