CategoricalArrays
Пакет предоставляет тип CategoricalArray
, предназначенный для эффективного и удобного хранения категориальных данных (неупорядоченных или номинальных или упорядоченных или порядковых). CategoricalArray{T}
содержит значения типа T
. Вариант CategoricalArray{Union{T, Missing}}
может также содержать отсутствующие значения (представленные как missing
и имеющие тип Missing
). При индексировании CategoricalArray{T}
возвращает специальные объекты CategoricalValue{T}
, а не исходные значения типа T
. CategoricalValue
является простой оболочкой вокруг категориальных уровней и позволяет очень эффективно извлекать и сравнивать фактические значения. Более простые типы массивов, хранящие данные с небольшим количеством значений без их заключения в оболочку, доступны в пакетах PooledArrays.jl и IndirectArrays.jl.
Главная особенность CategoricalArray
заключается в том, что он поддерживает пул уровней, которые могут появиться в данных. Эти уровни хранятся в определенном порядке: для неупорядоченных массивов этот порядок используется только для красивого отображения (например, в перекрестных таблицах или графиках). Для упорядоченных массивов он также позволяет сравнивать значения с помощью операторов <
и >
: сравнение происходит на основе упорядочения уровней, хранящихся в массиве. Упорядоченное значение CategoricalValue
можно также сравнить со значением, которое при преобразовании равно одному из уровней этого CategoricalValue
. Упорядочен ли массив, можно определить либо при построении с помощью аргумента ordered
, либо в любой момент с помощью функции ordered!
. Функция levels
возвращает все уровни CategoricalArray
, а функцию levels!
можно использовать для задания уровней и их порядка. Уровни также автоматически расширяются при задании для элемента массива значения уровня, который ранее не встречался. Однако их удаление всегда выполняется вручную с помощью функции droplevels!
.