#' Calculate Materials
#'
#' @description Internal function that calculates material emissions
#'
#' @param infra data frame with infrastructure properties
#' @param combined a pre-joined data frame
#' @param material_sites nearest material site for project
#' @return a list of data frames
#' @examples
#' \dontrun{
#' evaluate_materials()
#' }
#' @export
#'
cacualte_materials <- function(infra, combined, material_sites){
# Steps
# 1 - Calculate quantity of materials required and emission (A1-3)
# 2 - Summarise amount of material types required for transport (A4)
# 3 - Calculate emissions from contribution process (A5)
# 4 - Calculate emissions from replacements over lifetime (B4)
combined$quantity_total <- ifelse(combined$input_unit.x == "number",
combined$quantity,
combined$quantity * infra$length)
combined$emissions_total <- combined$quantity_total * combined$carbon_factor
#A1-3 Emissions & A5 Emissions
A1_3_emissions = sum(combined$emissions_total, na.rm = TRUE) +
sum(combined$no_granular_data_A1_A3, na.rm = TRUE) * infra$length
A5_emissions = sum(combined$A5 * infra$length, na.rm = TRUE)
#A4 Emissions
combined = dplyr::left_join(combined, material_sites, by = c("material_type" = "Material_Types"))
combined$distance_km = combined$distance_km * 1.4 # Add factor of 1.4 for circuity
combined$distance_km[is.na(combined$distance_km)] = 50 #Assume 50km for unknown distances
# Emission factors laden and unladen lorry
# 0.00010749 tCO2e/t.km
# 0.0000874 tCO2e/t.km
combined$A4 = (combined$distance_km * combined$quantity_total / 1000 * 0.00010749 +
combined$distance_km * 0.0000874) * 1000
A4_emissions = sum(combined$A4, na.rm = TRUE) +
sum(combined$no_granular_data_A4, na.rm = TRUE) * infra$length
#B4 Assume same as construction * replacements
combined$B4_granular = (combined$emissions_total + combined$A4) * combined$replacements_during_lifetime
combined$B4_non_granular = (combined$no_granular_data_A1_A3 * infra$length) * combined$replacements_during_lifetime
combined$B4 = rowSums(combined[,c("B4_granular", "B4_non_granular")], na.rm=TRUE)
B4_emissions = sum(combined$B4, na.rm = TRUE) +
sum(combined$no_granular_data_B4, na.rm = TRUE) * infra$length
# B2 emissions - non granular data only?
B2_emissions = sum(combined$no_granular_data_B2, na.rm = TRUE) * infra$length
# Make Detailed Emission Table
combined = combined[,c("intervention","asset","item",
"quantity_total","input_unit.x",
"emissions_total","A4",
"A5","B4","no_granular_data_A1_A3",
"no_granular_data_A4","no_granular_data_B2",
"no_granular_data_B4","replacements_during_lifetime","asset_lifetime")]
names(combined) = c("intervention","asset","item",
"quantity","quantity_units",
"A1_3","A4",
"A5","B4","no_granular_data_A1_A3","no_granular_data_A4",
"no_granular_data_B2","no_granular_data_B4",
"replacements_during_lifetime","asset_lifetime")
combined = combined[order(combined$A1_3, decreasing = TRUE),]
headline = data.frame(A1_3_emissions = A1_3_emissions,
A4_emissions = A4_emissions,
A5_emissions = A5_emissions,
B2_emissions = B2_emissions,
B4_emissions = B4_emissions,
stringsAsFactors = FALSE)
res <- list(headline, combined)
names(res) <- c("material_emissions","materials_itemised")
return(res)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.