From dd3589b7ae7dd5abf53fcba948cf67cb83e02ee9 Mon Sep 17 00:00:00 2001 From: lulunac27a Date: Tue, 30 Jan 2024 21:29:10 -0600 Subject: [PATCH] Add median of values Add the medium of the values from a column or range --- src/calc/single_param_function.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/calc/single_param_function.ts b/src/calc/single_param_function.ts index 3dd9060..91d1a70 100644 --- a/src/calc/single_param_function.ts +++ b/src/calc/single_param_function.ts @@ -34,6 +34,9 @@ export class SingleParamFunctionCall implements ValueProvider { case 'mean': this.op = mean; break; + case 'median': + this.op = median; + break; default: throw Error('Unknown single param function call: ' + functionName); } @@ -91,3 +94,20 @@ const mean = (value: Value): Value => { return new Value([[(total / count).toString()]]); }; +/** + * Median of all the cells in the input value, producing a single cell output. + */ +const median = (value: Value): Value => { + const sortedValues = [...value.val].sort((a, b) => a - b); + let isEven; + let middleIndex; + if (sortedValues.length % 2 == 0) { + middleIndex = sortedValues.length / 2; + isEven = true; + } + else { + middleIndex = (sortedValues.length - 1) / 2; + isEven = false; + } + return new Value([[(isEven ? (sortedValues[middleIndex - 1] + sortedValues[middleIndex]) / 2 : sortedValues[middleIndex]).toString()]]); +};