public MatrisBase <object> Sum(MatrisBase <object> df, int numberOnly = 1) { if (!df.IsValid()) { throw new Exception(CompilerMessage.DF_INVALID_SIZE); } int nc = df.Col; int nr = df.Row; List <object> sums = new List <object>(); for (int c = 0; c < nc; c++) { sums.Add(ArrayMethods.ArraySum(df.ColList(c, 0), 0, nr, numberOnly) ?? float.NaN); } return(df is Dataframe data ? new Dataframe(new List <List <object> >() { sums }, data.Delimiter, data.NewLine, null, Dataframe.GetCopyOfLabels(data.GetColLabels()), null, data.GetColSettings().Copy()) : new MatrisBase <object>(new List <List <object> >() { sums })); }
public MatrisBase <object> Mean(MatrisBase <object> df, int numberOnly = 1) { if (!df.IsValid()) { throw new Exception(CompilerMessage.DF_INVALID_SIZE); } int nc = df.Col; int nr = df.Row; List <object> means = new List <object>(); int pop; for (int c = 0; c < nc; c++) { pop = nr - (numberOnly == 1 ? df.AmountOfNanInColumn(c) : 0); object res = ArrayMethods.ArraySum(df.ColList(c, 0), 0, nr, numberOnly) ?? float.NaN; if (pop == 0) { means.Add(float.NaN); } else { means.Add(float.IsNaN((float)res) ? res : (float)res / pop); } } return(df is Dataframe data ? new Dataframe(new List <List <object> >() { means }, data.Delimiter, data.NewLine, null, Dataframe.GetCopyOfLabels(data.GetColLabels()), null, data.GetColSettings().Copy()) : new MatrisBase <object>(new List <List <object> >() { means })); }