#[macro_use]
extern crate agnes;
tablespace![
table salary {
EmpId: u64,
Year2010: f64,
Year2011: f64,
Year2012: f64,
Year2013: f64,
Year2014: f64,
SalaryYear: String,
Salary: f64,
TotalYearlySalary: f64,
}
];
use salary::*;
fn main() {
let orig_table = table![
EmpId = [0u64, 1u64, 2u64];
Year2010 = [1500.0, 900.0, 600.0];
Year2011 = [1600.0, 920.0, 800.0];
Year2012 = [1700.0, 940.0, 900.0];
Year2013 = [1850.0, 940.0, 1020.0];
Year2014 = [2000.0, 970.0, 1100.0];
];
assert_eq!((orig_table.nrows(), orig_table.nfields()), (3, 6));
println!("Original table:\n\n{}", orig_table);
let melted_table = orig_table
.melt::<Labels![Year2010, Year2011, Year2012, Year2013, Year2014], SalaryYear, Salary, _>();
assert_eq!((melted_table.nrows(), melted_table.nfields()), (15, 3));
assert_eq!(
melted_table.fieldnames(),
vec!["EmpId", "SalaryYear", "Salary"]
);
println!("Melted table:\n\n{}", melted_table);
let agg_table = melted_table
.aggregate::<Labels![SalaryYear], Salary, TotalYearlySalary, _, _, _>(0.0, |accum, val| {
*accum = *accum + val.unwrap_or(&0.0);
});
assert_eq!((agg_table.nrows(), agg_table.nfields()), (5, 2));
println!("Aggregated table:\n\n{}", agg_table);
}