exponenta event banner

grouptransform

Преобразование по группам

Описание

пример

G = grouptransform(T,groupvars,method) преобразует данные в таблице или расписании с помощью вычислений в method, группирование по переменным, указанным в groupvars. Продукция G - таблица или расписание, содержащее преобразованные данные вместо переменных nongrouping из T. Например, G = grouptransform(T,'Gender','norm') нормализует данные в T по полу с использованием 2-нормы.

пример

G = grouptransform(T,groupvars,groupbins,method) содержит преобразованные данные в соответствии с groupbinsразмещение групп в конце выходной таблицы в качестве дополнительных переменных. Например, G = grouptransform(T,'SaleDate','year','rescale') масштабирует данные в T до диапазона [0,1] и ячеек по году продажи.

G = grouptransform(___,datavars) указывает переменные таблицы для преобразования для любого из предыдущих синтаксисов.

пример

G = grouptransform(___,Name,Value) задает дополнительные свойства группировки с использованием одной или нескольких пар «имя-значение». Например, G = grouptransform(T,'Temp','linearfill','ReplaceValues',false) добавляет заполненные данные в качестве дополнительной переменной T вместо замены переменных nongrouping.

B = grouptransform(A,groupvars,method) возвращает преобразованные данные в соответствии с уникальными комбинациями векторов группировки в groupvars когда A является вектором или матрицей. groupvars может быть вектором-столбцом, матрицей или массивом ячеек векторов-столбцов.

пример

B = grouptransform(A,groupvars,groupbins,method) содержит преобразованные данные в соответствии с groupbins.

B = grouptransform(___,Name,Value) указывает дополнительные свойства группировки, использующие одну или несколько пар имя-значение для любого из предыдущих синтаксисов массива.

пример

[B,BG] = grouptransform(A,___) также возвращает строки векторов группировки.

Примеры

свернуть все

Создайте расписание, содержащее статус выполнения для 3 групп.

timeStamp = days([1 1 1 2 2 2 3 3 3]');
teamNumber = [1 2 3 1 2 3 1 2 3]';
percentComplete = [14.2 28.1 11.5 NaN NaN 19.3 46.1 51.2 30.3]';
T = timetable(timeStamp,teamNumber,percentComplete)
T=9×2 timetable
    timeStamp    teamNumber    percentComplete
    _________    __________    _______________

    1 day            1              14.2      
    1 day            2              28.1      
    1 day            3              11.5      
    2 days           1               NaN      
    2 days           2               NaN      
    2 days           3              19.3      
    3 days           1              46.1      
    3 days           2              51.2      
    3 days           3              30.3      

Заполнить отсутствующие проценты состояния (NaN) для каждой группы с использованием линейной интерполяции.

G = grouptransform(T,'teamNumber','linearfill','percentComplete')
G=9×2 timetable
    timeStamp    teamNumber    percentComplete
    _________    __________    _______________

    1 day            1               14.2     
    1 day            2               28.1     
    1 day            3               11.5     
    2 days           1              30.15     
    2 days           2              39.65     
    2 days           3               19.3     
    3 days           1               46.1     
    3 days           2               51.2     
    3 days           3               30.3     

Добавление заполненных данных в исходную таблицу вместо замены percentComplete переменная, используйте 'ReplaceValues' параметр.

Gappend = grouptransform(T,'teamNumber','linearfill','percentComplete','ReplaceValues',false)
Gappend=9×3 timetable
    timeStamp    teamNumber    percentComplete    linearfill_percentComplete
    _________    __________    _______________    __________________________

    1 day            1              14.2                     14.2           
    1 day            2              28.1                     28.1           
    1 day            3              11.5                     11.5           
    2 days           1               NaN                    30.15           
    2 days           2               NaN                    39.65           
    2 days           3              19.3                     19.3           
    3 days           1              46.1                     46.1           
    3 days           2              51.2                     51.2           
    3 days           3              30.3                     30.3           

Создайте таблицу дат и соответствующих прибылей.

timeStamps = datetime([2017 3 4; 2017 3 2; 2017 3 15; 2017 3 10;...
                       2017 3 14; 2017 3 31; 2017 3 25;...
                       2017 3 29; 2017 3 21; 2017 3 18]);
profit = [2032 3071 1185 2587 1998 2899 3112 909 2619 3085]';
T = table(timeStamps,profit)
T=10×2 table
    timeStamps     profit
    ___________    ______

    04-Mar-2017     2032 
    02-Mar-2017     3071 
    15-Mar-2017     1185 
    10-Mar-2017     2587 
    14-Mar-2017     1998 
    31-Mar-2017     2899 
    25-Mar-2017     3112 
    29-Mar-2017      909 
    21-Mar-2017     2619 
    18-Mar-2017     3085 

Группировка по дням, нормализация прибыли по 2-норме.

G = grouptransform(T,'timeStamps','dayname','norm')
G=10×3 table
    timeStamps     profit     dayname_timeStamps
    ___________    _______    __________________

    04-Mar-2017    0.42069        Saturday      
    02-Mar-2017          1        Thursday      
    15-Mar-2017    0.79344        Wednesday     
    10-Mar-2017    0.66582        Friday        
    14-Mar-2017    0.60654        Tuesday       
    31-Mar-2017    0.74612        Friday        
    25-Mar-2017    0.64428        Saturday      
    29-Mar-2017    0.60864        Wednesday     
    21-Mar-2017    0.79506        Tuesday       
    18-Mar-2017    0.63869        Saturday      

Создайте вектор дат и вектор соответствующих значений прибыли.

timeStamps = datetime([2017 3 4; 2017 3 2; 2017 3 15; 2017 3 10; ...
                       2017 3 14; 2017 3 31; 2017 3 25; ...
                       2017 3 29; 2017 3 21; 2017 3 18]);
profit = [2032 3071 1185 2587 1998 2899 3112 909 2619 3085]';

Группировка по дням недели, нормализация значений прибыли по 2-норме. Просмотрите преобразованные данные и группу, которой они соответствуют.

[normDailyProfit,dayOfWeek] = grouptransform(profit,timeStamps,'dayname','norm')
normDailyProfit = 10×1

    0.4207
    1.0000
    0.7934
    0.6658
    0.6065
    0.7461
    0.6443
    0.6086
    0.7951
    0.6387

dayOfWeek = 10x1 categorical
     Saturday 
     Thursday 
     Wednesday 
     Friday 
     Tuesday 
     Friday 
     Saturday 
     Wednesday 
     Tuesday 
     Saturday 

Входные аргументы

свернуть все

Входные данные, указанные как таблица или расписание.

Входной массив, заданный как вектор или матрица.

Группирование переменных или векторов, указанных в качестве одной из следующих опций:

  • Для ввода массива, groupvars может быть либо вектором столбца с тем же количеством строк, что и A или группу векторов столбцов, расположенных в матрице или массиве ячеек.

  • Для входных данных таблицы или расписания, groupvars указывает, какие переменные следует использовать для вычисления групп в данных. Можно указать переменные группировки с помощью любого из параметров в этой таблице.

    ВыборОписаниеПримеры
    Имя переменной

    Вектор символов или скалярная строка, задающая имя переменной одной таблицы

    'Var1'

    "Var1"

    Вектор имен переменных

    Массив ячеек символьных векторов или строковый массив, где каждый элемент является именем переменной таблицы

    {'Var1' 'Var2'}

    ["Var1" "Var2"]

    Скаляр или вектор переменных индексов

    Скаляр или вектор индексов табличных переменных

    1

    [1 3 5]

    Логический вектор

    Логический вектор, элементы которого соответствуют переменной таблицы, где true включает соответствующую переменную и false исключает его

    [true false true]

    Дескриптор функции

    Дескриптор функции, принимающий переменную таблицы в качестве входного значения и возвращающий логический скаляр

    @isnumeric

    vartype нижний индекс

    Подстрочный индекс таблицы, созданный vartype функция

    vartype('numeric')

Пример: grouptransform(T,"Var3",method)

Метод вычисления, указанный как один из следующих:

Метод

Описание

'zscore'

Нормализовать данные так, чтобы они имели среднее значение 0 и стандартное отклонение 1

'norm'

Нормализовать данные по 2-норме

'meancenter'

Нормализовать данные, чтобы они имели среднее значение 0

'rescale'

Диапазон масштабирования до [0,1]

'meanfill'

Заполните отсутствующие значения средним значением данных группы

'linearfill'

Заполните недостающие значения линейной интерполяцией не пропускаемых групповых данных

Можно также указать дескриптор функции, который возвращает один объект, первое измерение которого имеет длину 1 или имеет то же количество строк, что и входные данные. Если функция возвращает объект с длиной первой размерности, равной 1, то grouptransform повторяет это значение, так что выходные данные имеют то же количество строк, что и входные данные.

Типы данных: char | string | function_handle

Переменные таблицы для работы, указанные как один из параметров в этой таблице. datavars указывает, к каким переменным входной таблицы или расписания применяются методы. Другие переменные в таблице, не указанные datavars пройти на выход без работы. Когда datavars не указан, grouptransform оперирует с каждой переменной nongrouping.

ВыборОписаниеПримеры
Имя переменной

Вектор символов или скалярная строка, задающая имя переменной одной таблицы

'Var1'

"Var1"

Вектор имен переменных

Массив ячеек символьных векторов или строковый массив, где каждый элемент является именем переменной таблицы

{'Var1' 'Var2'}

["Var1" "Var2"]

Скаляр или вектор переменных индексов

Скаляр или вектор индексов табличных переменных

1

[1 3 5]

Логический вектор

Логический вектор, элементы которого соответствуют переменной таблицы, где true включает соответствующую переменную и false исключает его

[true false true]

Дескриптор функции

Дескриптор функции, принимающий переменную таблицы в качестве входного значения и возвращающий логический скаляр

@isnumeric

vartype нижний индекс

Подстрочный индекс таблицы, созданный vartype функция

vartype('numeric')

Пример: grouptransform(T,groupvars,method,["Var1" "Var2" "Var4"])

Схема Binning, заданная как одна из следующих опций:

  • 'none', указывающий на отсутствие биннинга

  • Список ребер ячейки, указанный как числовой вектор или datetime вектор для datetime группирование переменных

  • Число ячеек, указанное как целочисленный скаляр

  • Длительность времени, заданная как скаляр типа duration или calendarDuration указание ширины ячейки (для datetime или duration только группирование переменных)

  • Массив ячеек, содержащий правила объединения для каждой переменной группировки

  • Ячейка времени для datetime и duration группирование только переменных, указанных как один из следующих векторов символов:

    СтоимостьОписаниеТип данных
    'second'

    Каждая ячейка составляет 1 секунду.

    datetime и duration
    'minute'

    Каждая ячейка - 1 минута.

    datetime и duration
    'hour'

    Каждая ячейка составляет 1 часа.

    datetime и duration
    'day'

    Каждая ячейка составляет 1 календарный день. Это значение используется для перехода на летнее время.

    datetime и duration
    'week'Каждая ячейка составляет 1 календарную неделю.datetime только
    'month'Каждая ячейка составляет 1 календарный месяц.datetime только
    'quarter'Каждая ячейка составляет 1 календарный квартал.datetime только
    'year'

    Каждая ячейка составляет 1 календарный год. Это значение приходится на високосные дни.

    datetime и duration
    'decade'Каждая ячейка составляет 1 десятилетие (10 календарных лет).datetime только
    'century'Каждая ячейка составляет 1 век (100 календарных лет).datetime только
    'secondofminute'

    Ячейки находятся в секундах от 0 до 59.

    datetime только
    'minuteofhour'

    Ячейки находятся в минутах от 0 до 59.

    datetime только
    'hourofday'

    Бункеры - часы от 0 до 23.

    datetime только
    'dayofweek'

    Бункеры - дни от 1 до 7. Первый день недели - воскресенье.

    datetime только
    'dayname'Ячейки - это имена полных дней, такие как 'Sunday'.datetime только
    'dayofmonth'Бункеры - дни от 1 до 31.datetime только
    'dayofyear'Бункеры - дни от 1 до 366.datetime только
    'weekofmonth'Бункеры составляют недели от 1 до 6.datetime только
    'weekofyear'Бункеры - недели от 1 до 54.datetime только
    'monthname'Ячейки - это имена полных месяцев, такие как 'January'.datetime только
    'monthofyear'

    Бункеры - месяцы от 1 до 12.

    datetime только
    'quarterofyear'Бункеры - это кварталы от 1 до 4.datetime только

Если задано несколько переменных группирования, можно предоставить одно правило группирования, которое применяется ко всем переменным группирования, или массив ячеек, содержащий метод группирования для каждой переменной группирования, такой как {'none',[0 2 4 Inf]}.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: G = grouptransform(T,groupvars,groupbins,'zscore','IncludedEdge','right')

Включенное ребро ячейки, указанное как 'left' или 'right', указывающее, какой конец интервала ячейки включает в себя.

Эта пара имя-значение может быть указана только тогда, когда groupbins и значение применяется ко всем схемам объединения для всех переменных группирования или векторов.

Индикатор размещения преобразования, указанный как числовой или логический 1 (true) или 0 (false). Когда значение параметра равно true, grouptransform выводит таблицу или массив с преобразованными данными вместо несгруппируемых переменных или векторов из входных данных. Когда значение параметра равно false, grouptransform добавляет преобразованные данные в виде дополнительных матричных столбцов или табличных переменных к входным данным.

Выходные аргументы

свернуть все

Выходная таблица, возвращаемая в виде таблицы или расписания, содержащего преобразованные данные для каждой группы.

Выходной массив, возвращаемый как вектор или матрица, содержащая преобразованные данные.

Группирование векторов для входных данных массива, возвращаемых в виде вектора столбца или массива ячеек векторов столбца.

Совет

  • При выполнении большого количества вызовов grouptransform, рассмотрите возможность преобразования переменных группировки в тип categorical или logical по возможности для повышения производительности. Например, при наличии переменной группирования типа char (например, Gender с элементами 'Male' и 'Female'), его можно преобразовать в категориальное значение с помощью команды categorical(Gender).

Расширенные возможности

Представлен в R2018b