public static void CombineRows(this IDataWithAnnotationColumns mdata, List <int> rowIdxs, Func <double[], double> combineNumeric, Func <string[], string> combineString, Func <string[][], string[]> combineCategory, Func <double[][], double[]> combineMultiNumeric) { if (!rowIdxs.Any()) { return; } var resultRow = rowIdxs[0]; for (int i = 0; i < mdata.NumericColumnCount; i++) { var column = mdata.NumericColumns[i]; var values = ArrayUtils.SubArray(column, rowIdxs); column[resultRow] = combineNumeric(values); } for (int i = 0; i < mdata.StringColumnCount; i++) { var column = mdata.StringColumns[i]; var values = ArrayUtils.SubArray(column, rowIdxs); column[resultRow] = combineString(values); } for (int i = 0; i < mdata.CategoryColumnCount; i++) { var column = mdata.GetCategoryColumnAt(i); var values = ArrayUtils.SubArray(column, rowIdxs); column[resultRow] = combineCategory(values); mdata.SetCategoryColumnAt(column, i); } for (int i = 0; i < mdata.MultiNumericColumnCount; i++) { var column = mdata.MultiNumericColumns[i]; var values = ArrayUtils.SubArray(column, rowIdxs); column[resultRow] = combineMultiNumeric(values); } }
/// <summary> /// Add a number of empty rows to the table /// </summary> public static void AddEmptyRows(this IDataWithAnnotationColumns mdata, int length) { for (int i = 0; i < mdata.StringColumnCount; i++) { mdata.StringColumns[i] = mdata.StringColumns[i].Concat(Enumerable.Repeat(String.Empty, length)).ToArray(); } for (int i = 0; i < mdata.NumericColumnCount; i++) { mdata.NumericColumns[i] = mdata.NumericColumns[i].Concat(Enumerable.Repeat(Double.NaN, length)).ToArray(); } for (int i = 0; i < mdata.MultiNumericColumnCount; i++) { mdata.MultiNumericColumns[i] = mdata.MultiNumericColumns[i].Concat(Enumerable.Range(0, length).Select(_ => new double[0])).ToArray(); } for (int i = 0; i < mdata.CategoryColumnCount; i++) { mdata.SetCategoryColumnAt(mdata.GetCategoryColumnAt(i).Concat(Enumerable.Repeat(new string[0], length)).ToArray(), i); } }