withCategoricColumnEnumerated method

DataFrame withCategoricColumnEnumerated(
  1. String name
)

A new data frame with numeric columns added to identify each category.

Example:

final d = petals.withColumns(["species"]);
print(d);
print(d.withCategoricColumnEnumerated("species"));

.------------.
|species     |
:------------:
|setosa      |
|setosa      |
|setosa      |
|setosa      |
|versicolor  |
|versicolor  |
|versicolor  |
|versicolor  |
|virginica   |
|virginica   |
|virginica   |
|virginica   |
'------------'

.--------------.------------------.-----------------.------------.
|species_setosa|species_versicolor|species_virginica|species     |
:--------------+------------------+-----------------+------------:
|1             |0                 |0                |setosa      |
|1             |0                 |0                |setosa      |
|1             |0                 |0                |setosa      |
|1             |0                 |0                |setosa      |
|0             |1                 |0                |versicolor  |
|0             |1                 |0                |versicolor  |
|0             |1                 |0                |versicolor  |
|0             |1                 |0                |versicolor  |
|0             |0                 |1                |virginica   |
|0             |0                 |1                |virginica   |
|0             |0                 |1                |virginica   |
|0             |0                 |1                |virginica   |
'--------------'------------------'-----------------'------------'

Implementation

DataFrame withCategoricColumnEnumerated(String name) {
  if (!categoricColumns.containsKey(name)) {
    throw PackhorseError.badArgument("No categoric column called '$name'.");
  }
  return copy
    ..numericColumns.addAll({
      for (final category in categoricColumns[name]!.categories)
        "${name}_$category": NumericColumn(
            categoricColumns[name]!.values.map((x) => x == category ? 1 : 0))
    });
}