private static void AddCategoricalColumns(IDataWithAnnotationColumns mdata1, IDataWithAnnotationColumns mdata2, Parameters parameters, IList <int[]> indexMap, IDataWithAnnotationColumns result) { int[] catCols = parameters.GetParam <int[]>("Categorical columns").Value; string[][][] newCatColumns = new string[catCols.Length][][]; string[] newCatColNames = new string[catCols.Length]; for (int i = 0; i < catCols.Length; i++) { string[][] oldCol = mdata2.GetCategoryColumnAt(catCols[i]); newCatColNames[i] = mdata2.CategoryColumnNames[catCols[i]]; newCatColumns[i] = new string[mdata1.RowCount][]; for (int j = 0; j < mdata1.RowCount; j++) { int[] inds = indexMap[j]; List <string[]> values = new List <string[]>(); foreach (int ind in inds) { string[] v = oldCol[ind]; if (v.Length > 0) { values.Add(v); } } newCatColumns[i][j] = values.Count == 0 ? new string[0] : ArrayUtils.UniqueValues(ArrayUtils.Concat(values.ToArray())); } } for (int i = 0; i < catCols.Length; i++) { result.AddCategoryColumn(newCatColNames[i], "", newCatColumns[i]); } }
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); } }
private static List <string[][]> GetCategoryColumns(IDataWithAnnotationColumns mdata) { List <string[][]> result = new List <string[][]>(); for (int i = 0; i < mdata.CategoryColumnCount; i++) { result.Add(mdata.GetCategoryColumnAt(i)); } return(result); }
/// <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); } }
private static List<string[][]> GetCategoryColumns(IDataWithAnnotationColumns mdata) { List<string[][]> result = new List<string[][]>(); for (int i = 0; i < mdata.CategoryColumnCount; i++){ result.Add(mdata.GetCategoryColumnAt(i)); } return result; }