R/stacker.R

stack_data <- stack_data %>% data.table()
file_summary_dt <- data.table()

for (i in 1:iternum) {
  
  iter_dt <- stack_data[Iteration == i]
  
  #iter_dt <- iter_dt %>% data.table()
  
  iter_dt[, gen_cumsum :=  lapply(.SD, cumsum), by = .(Date, HE), .SDcols = "gen"]
  
  iter_dt[, non_full_gen_indicator := (gen_cumsum >= load) * 1 * (Stacking_Order)]
  iter_dt[, partial_gen_indicator := lapply(.SD, find_min_gtzero_func), .SDcols = "non_full_gen_indicator", by = .(Date, HE)]
  iter_dt[, no_sales_indicator := lapply(.SD, sum), .SDcols = "partial_gen_indicator", by = .(Date, HE)]
  
  iter_dt[, partial_gen_actually_full_gen_to_sales_indicator := (partial_gen_indicator == Stacking_Order) * 1 * ((gen - (gen_cumsum - load)) == 0)*1]
  iter_dt[, partial_gen_actually_full_gen_to_nl_indicator := (partial_gen_indicator == Stacking_Order) * 1 * ((gen - (gen_cumsum - load)) == gen)*1]
  
  iter_dt[, full_gen_to_nl := (no_sales_indicator == 0 | (Stacking_Order < partial_gen_indicator) | partial_gen_actually_full_gen_to_nl_indicator  == 1) * 1 * gen]
  iter_dt[, partial_gen_to_nl :=  (partial_gen_indicator == Stacking_Order & partial_gen_actually_full_gen_to_nl_indicator == 0 & partial_gen_actually_full_gen_to_sales_indicator == 0) * 1 * (gen - (gen_cumsum - load))]
  iter_dt[, partial_gen_to_sales :=  (partial_gen_to_nl != 0) * 1 * ( gen - partial_gen_to_nl)]
  iter_dt[, full_gen_to_sales := ((Stacking_Order > partial_gen_indicator & no_sales_indicator > 0) | (partial_gen_actually_full_gen_to_sales_indicator == 1)) * 1 * gen]
  
  iter_dt[, total_gen_to_nl := full_gen_to_nl + partial_gen_to_nl]
  iter_dt[, total_gen_to_sales := partial_gen_to_sales + full_gen_to_sales]
  iter_dt[, total_gen_to_nl_cumsum :=  lapply(.SD, cumsum), by = .(Date, HE), .SDcols = "total_gen_to_nl"]
  iter_dt[, max_total_gen_to_nl_cumsum :=  lapply(.SD, max), by = .(Date, HE), .SDcols = "total_gen_to_nl_cumsum"]
  iter_dt[, spot_purch := (max_total_gen_to_nl_cumsum < load) * 1 * (load - max_total_gen_to_nl_cumsum)]
  
  # iter_dt <- iter_dt %>% mutate(ATC_Indicator = 1, OnPk_Indicator = ifelse(PEAK == "ONPEAK", 1, 0), OffPk_Indicator = ifelse(PEAK == "OFFPEAK", 1,0))
  # iter_dt$PEAK <- NULL
  
  data_col_names <- c("gen", "load", "total_gen_to_nl", "total_gen_to_sales", "spot_purch")
  
  iter_summary_dt <- rbind(iter_dt[ATC_Indicator == 1, lapply(.SD, sum), by = .(Year, Month, Entity, Stacking_Order, Iteration), .SDcols = data_col_names][, Timepd := "ATC"],
                           iter_dt[OnPk_Indicator == 1, lapply(.SD, sum), by = .(Year, Month, Entity, Stacking_Order, Iteration), .SDcols = data_col_names][, Timepd := "OnPk"], 
                           iter_dt[OffPk_Indicator == 1, lapply(.SD, sum), by = .(Year, Month, Entity, Stacking_Order, Iteration), .SDcols = data_col_names][, Timepd := "OffPk"])
  
  file_summary_dt <- rbind(iter_summary_dt, file_summary_dt)
  
  print(paste("Iteration # " , i , " finished.", sep = ""))
}

total_summary_dt <- file_summary_dt
total_summary_dt <- total_summary_dt[order(Iteration, Year, Month, Stacking_Order)]
bsuhy/EncompassR documentation built on Feb. 22, 2022, 12:58 a.m.