Ejemplo n.º 1
0
        public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables,
                                ref IDocumentData[] documents, ProcessInfo processInfo)
        {
            var name     = param.GetParam <string>("Name").Value;
            var keep     = param.GetParam <bool>("Keep original columns").Value;
            var choice   = param.GetParam <int[]>("Columns").Value;
            var strategy = Strategies[param.GetParam <int>("Strategy").Value];
            var combiner = GetCombiner(strategy);
            var columns  = choice.Select(mdata.GetCategoryColumnAt).ToArray();
            var n        = mdata.RowCount;
            var values   = new string[n][];

            for (int i = 0; i < mdata.RowCount; i++)
            {
                var row = columns.Select(col => col[i]).ToArray();
                values[i] = combiner(row);
            }
            if (!keep)
            {
                // if unsorted removing column will change index of other columns
                foreach (var col in choice.OrderByDescending(col => col))
                {
                    mdata.RemoveCategoryColumnAt(col);
                }
            }
            mdata.AddCategoryColumn(name, "Combined column", values);
        }