grouptransform

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

Описание

пример

G = grouptransform(T,groupvars,method) преобразует данные в таблице или расписании, используя расчет в method, группировка по переменным, заданным в groupvars. Область выхода G - таблица или расписание, содержащее преобразованные данные вместо переменных, не входящих в группу 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 вместо замены переменных, не входящих в группу.

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 указывает, к каким переменным таблицы входа или timetable применять методы. Другие переменные в таблице, не заданные datavars пройти к выходу без работы. Когда datavars не задан, grouptransform действует с каждой переменной, не входящей в группу.

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

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

'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"])

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

  • '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