exponenta event banner

groupsummary

Групповые сводные расчеты

Описание

пример

G = groupsummary(T,groupvars) возвращает таблицу, содержащую вычисленные группы и количество элементов в каждой группе для данных в таблице или расписании T. Группа содержит уникальные комбинации переменных группирования в groupvars. Например, G = groupsummary(T,'Gender') возвращает число Male элементы и количество Female элементы в переменной Gender.

пример

G = groupsummary(T,groupvars,method) также возвращает вычисления, указанные в method. Например, G = groupsummary(T,'Gender','median') возвращает медиану всех переменных nongrouping в T для обоих полов, в дополнение к количеству элементов в каждой группе.

пример

G = groupsummary(T,groupvars,method,datavars) определяет переменные для применения вычислений.

G = groupsummary(T,groupvars,groupbins) определяет способ складирования данных в groupvars. Например, G = groupsummary(T,'SaleDate','year') дает подсчет группы для всех продаж в T в течение каждого года в соответствии с переменной группировки SaleDate.

G = groupsummary(T,groupvars,groupbins,method) складирует данные в соответствии с groupbins для вычислений, указанных в method.

пример

G = groupsummary(T,groupvars,groupbins,method,datavars) складирует данные в соответствии с groupbins и определяет переменные для применения вычислений.

пример

G = groupsummary(___,Name,Value) указывает дополнительные свойства группировки, использующие одну или несколько пар имя-значение для любого из предыдущих синтаксисов. Например, G = groupsummary(T,'Category1','IncludeMissingGroups',false) исключает группу, созданную из отсутствующих categorical данные, указанные <undefined>.

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

пример

B = groupsummary(A,groupvars,groupbins,method) складирует данные в соответствии с groupbins.

пример

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

[B,BG] = groupsummary(A,___) также возвращает группы для каждого вектора группировки.

пример

[B,BG,BC] = groupsummary(A,___) также возвращает число групп для каждой группы.

Примеры

свернуть все

Вычисление суммарной статистики по табличным переменным.

Создание таблицы T содержит информацию о пяти лицах.

Gender = ["male";"female";"female";"male";"male"];
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
T = table(Gender,Age,Height,Weight)
T=5×4 table
     Gender     Age    Height    Weight
    ________    ___    ______    ______

    "male"      38       71       176  
    "female"    43       69       163  
    "female"    38       64       131  
    "male"      40       67       133  
    "male"      49       64       119  

Вычислить количество мужчин и женщин, указав Gender в качестве переменной группировки.

G = groupsummary(T,"Gender")
G=2×2 table
     Gender     GroupCount
    ________    __________

    "female"        2     
    "male"          3     

Вычислите средний возраст, рост и вес женщин и мужчин отдельно.

G = groupsummary(T,"Gender","mean")
G=2×5 table
     Gender     GroupCount    mean_Age    mean_Height    mean_Weight
    ________    __________    ________    ___________    ___________

    "female"        2            40.5         66.5            147   
    "male"          3          42.333       67.333         142.67   

По-прежнему группируясь по полу, вычисляйте только среднюю высоту.

G = groupsummary(T,"Gender","median","Height")
G=2×3 table
     Gender     GroupCount    median_Height
    ________    __________    _____________

    "female"        2             66.5     
    "male"          3               67     

Группирование данных таблицы с использованием двух переменных группирования.

Создание таблицы T содержит информацию о пяти лицах.

Gender = ["male";"female";"male";"female";"male"];
Smoker = logical([1;0;1;0;1]);
Weight = [176;163;131;133;119];
T = table(Gender,Smoker,Weight)
T=5×3 table
     Gender     Smoker    Weight
    ________    ______    ______

    "male"      true       176  
    "female"    false      163  
    "male"      true       131  
    "female"    false      133  
    "male"      true       119  

Вычислите средний вес, сгруппированный по полу и статусу курения. По умолчанию две комбинации пола и статуса курения не представлены в выходных данных, поскольку они являются пустыми группами.

G = groupsummary(T,{'Gender','Smoker'},'mean','Weight')
G=2×4 table
     Gender     Smoker    GroupCount    mean_Weight
    ________    ______    __________    ___________

    "female"    false         2             148    
    "male"      true          3             142    

Установите 'IncludeEmptyGroups' значение параметра для true для просмотра всех комбинаций групп, включая пустые комбинации.

G = groupsummary(T,{'Gender','Smoker'},'mean','Weight','IncludeEmptyGroups',true)
G=4×4 table
     Gender     Smoker    GroupCount    mean_Weight
    ________    ______    __________    ___________

    "female"    false         2             148    
    "female"    true          0             NaN    
    "male"      false         0             NaN    
    "male"      true          3             142    

Группировать данные по указанным ячейкам.

Создайте расписание, содержащее информацию о продажах за дни в течение одного месяца.

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]';
TotalItemsSold = [14 13 8 5 10 16 8 6 7 11]';
TT = timetable(TimeStamps,Profit,TotalItemsSold)
TT=10×2 timetable
    TimeStamps     Profit    TotalItemsSold
    ___________    ______    ______________

    04-Mar-2017     2032           14      
    02-Mar-2017     3071           13      
    15-Mar-2017     1185            8      
    10-Mar-2017     2587            5      
    14-Mar-2017     1998           10      
    31-Mar-2017     2899           16      
    25-Mar-2017     3112            8      
    29-Mar-2017      909            6      
    21-Mar-2017     2619            7      
    18-Mar-2017     3085           11      

Вычислите среднюю прибыль, сгруппированную по общей сумме проданных товаров, объединяя группы в интервалы номеров товаров.

format shorte
G = groupsummary(TT,'TotalItemsSold',[0 4 8 12 16],'mean','Profit')
G=3×3 table
    disc_TotalItemsSold    GroupCount    mean_Profit
    ___________________    __________    ___________

         [4, 8)            3.0000e+00    2.0383e+03 
         [8, 12)           4.0000e+00    2.3450e+03 
         [12, 16]          3.0000e+00    2.6673e+03 

Вычислите среднюю прибыль, сгруппированную по дням недели.

G = groupsummary(TT,'TimeStamps','dayname','mean','Profit')
G=5×3 table
    dayname_TimeStamps    GroupCount    mean_Profit
    __________________    __________    ___________

        Tuesday           2.0000e+00    2.3085e+03 
        Wednesday         2.0000e+00    1.0470e+03 
        Thursday          1.0000e+00    3.0710e+03 
        Friday            2.0000e+00    2.7430e+03 
        Saturday          3.0000e+00    2.7430e+03 

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

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]';

Вычислите среднюю прибыль по дням недели. Отображение средств, имен групп и количества членов в каждой группе.

format shorte
[meanDailyProfit,dayOfWeek,dailyCounts] = groupsummary(profit,timeStamps,'dayname','mean')
meanDailyProfit = 5×1

   2.3085e+03
   1.0470e+03
   3.0710e+03
   2.7430e+03
   2.7430e+03

dayOfWeek = 5x1 categorical
     Tuesday 
     Wednesday 
     Thursday 
     Friday 
     Saturday 

dailyCounts = 5×1

     2
     2
     1
     2
     3

Вычислите средние веса для четырех групп на основе их пола и статуса курильщика.

Храните информацию о пациенте как три вектора различных типов.

Gender = ["male";"female";"male";"female";"male"];
Smoker = logical([1;0;1;0;1]);
Weight = [176;163;131;133;119];

Группировка по полу и статусу курильщика, вычисление средних весов. B содержит среднее значение для каждой группы (NaN для пустых групп). BG - клеточный массив, содержащий два вектора, которые описывают группы по мере просмотра их элементов. Например, первая строка BG{1} говорит, что пациенты в первой группе - женщины, и первый ряд BG{2} говорит, что они некурящие. Наконец, BC содержит количество членов в каждой группе для соответствующих групп в BG.

[B,BG,BC] = groupsummary(Weight,{Gender,Smoker},'mean','IncludeEmptyGroups',true);
B
B = 4×1

   148
   NaN
   NaN
   142

BG{1}
ans = 4x1 string
    "female"
    "female"
    "male"
    "male"

BG{2}
ans = 4x1 logical array

   0
   1
   0
   1

BC
BC = 4×1

     2
     0
     0
     3

Загрузить данные, содержащие информацию о пациенте, и создать таблицу, описывающую пол, систолическое и диастолическое артериальное давление, рост и вес каждого пациента.

load patients
T = table(Gender,Systolic,Diastolic,Height,Weight)
T=100×5 table
      Gender      Systolic    Diastolic    Height    Weight
    __________    ________    _________    ______    ______

    {'Male'  }      124          93          71       176  
    {'Male'  }      109          77          69       163  
    {'Female'}      125          83          64       131  
    {'Female'}      117          75          67       133  
    {'Female'}      122          80          64       119  
    {'Female'}      121          70          68       142  
    {'Female'}      130          88          64       142  
    {'Male'  }      115          82          68       180  
    {'Male'  }      115          78          68       183  
    {'Female'}      118          86          66       132  
    {'Female'}      114          77          68       128  
    {'Female'}      115          68          66       137  
    {'Male'  }      127          74          71       174  
    {'Male'  }      130          95          72       202  
    {'Female'}      114          79          65       129  
    {'Male'  }      130          92          71       181  
      ⋮

Группируя по полу, вычислите корреляцию между ростом и весом пациента и корреляцией между систолическим и диастолическим артериальным давлением. Используйте xcov в качестве метода вычисления корреляции. Первые два входных аргумента для xcov описывать коррелируемые данные, третий аргумент описывает размер задержки, а четвертый аргумент описывает тип нормализации. Для расчета каждой группы: x и y аргументы переданы в xcov задаются попарно переменной из двух элементов ячейки ["Height","Systolic"] и ["Weight","Diastolic"].

G = groupsummary(T,"Gender",@(x,y)xcov(x,y,0,'coeff'),{["Height","Systolic"],["Weight","Diastolic"]})
G=2×4 table
      Gender      GroupCount    fun1_Height_Weight    fun1_Systolic_Diastolic
    __________    __________    __________________    _______________________

    {'Female'}        53             0.071278                 0.48731        
    {'Male'  }        47             0.047571                 0.50254        

Кроме того, если данные находятся в векторной или матричной форме, а не в таблице, можно предоставить данные для корреляции в качестве первого входного аргумента groupsummary.

[G,GR,GC] = groupsummary({[Height,Systolic],[Weight,Diastolic]},Gender,@(x,y)xcov(x,y,0,'coeff'))
G = 2×2

    0.0713    0.4873
    0.0476    0.5025

GR = 2x1 cell
    {'Female'}
    {'Male'  }

GC = 2×1

    53
    47

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

свернуть все

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

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

При указании дескриптора функции для method который принимает более одного входного аргумента, входные данные A должен быть массивом ячеек векторов или матриц. При каждом вызове функции по группам входными аргументами являются соответствующие столбцы каждого элемента в массиве ячеек. Например:

  • groupsummary({x1, y1},groupvars,@(x,y) myFun(x,y)) вычисляет myFun(x1,y1) для каждой группы.

  • groupsummary({[x1 x2], [y1 y2]},groupvars,@(x,y) myFun(x,y)) сначала вычисляет myFun(x1,y1) для каждой группы, а затем вычисляет myFun(x2,y2) для каждой группы.

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

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

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

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

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

    'Var1'

    "Var1"

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

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

    {'Var1' 'Var2'}

    ["Var1" "Var2"]

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

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

    1

    [1 3 5]

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

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

    [true false true]

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

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

    @isnumeric

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

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

    vartype('numeric')

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

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

  • 'sum' - сумма

  • 'mean' - среднее значение

  • 'median' - медиана

  • 'mode' - режим

  • 'var' - отклонение

  • 'std' - стандартное отклонение

  • 'min' - минимум

  • 'max' - не более

  • 'range' - максимум минус минимум

  • 'nummissing' - количество отсутствующих элементов

  • 'nnz' - количество ненулевых и ненулевыхNaN элементы

  • 'all' - все ранее перечисленные вычисления

Также можно указать method как дескриптор функции, который возвращает один объект на группу, первое измерение которой имеет длину 1. Для входных данных таблицы функция работает с каждой переменной таблицы отдельно.

Если входные данные являются таблицей T и укажите дескриптор функции для method который принимает более одного входного аргумента, необходимо указать datavars. datavars аргумент должен быть массивом ячеек, элементы которого указывают переменные таблицы, используемые для каждого ввода в метод. При каждом вызове функции по группам входными аргументами являются соответствующие табличные переменные элементов массива ячеек. Например:

  • groupsummary(T,groupvars,@(x,y) myFun(x,y),{"x1","y1"}) вычисляет myFun(T.x1,T.y1) для каждой группы.

  • groupsummary(T,groupvars,@(x,y) myFun(x,y),{["x1" "x2"],["y1" "y2"]}) сначала вычисляет myfun(T.x1,T.y1) для каждой группы, а затем вычисляет myfun(T.x2,T.y2) для каждой группы.

Когда входные данные находятся в векторной или матричной форме, и вы указываете дескриптор функции для method который принимает более одного входного аргумента, входные данные A должен быть массивом ячеек векторов или матриц. При каждом вызове функции входными аргументами являются соответствующие столбцы каждого элемента в массиве ячеек. Например:

  • groupsummary({x1,y1},groupvars,@(x,y) myFun(x,y)) вычисляет myFun(x1,y1) для каждой группы.

  • groupsummary({[x1 x2],[y1 y2]},groupvars,@(x,y) myFun(x,y)) сначала вычисляет myFun(x1,y1) для каждой группы, а затем вычисляет myFun(x2,y2) для каждой группы.

Чтобы указать несколько вычислений одновременно, перечислите опции в массиве ячеек, например: {'mean','median'} или {myFun1,myFun2}.

NaN значения во входных данных автоматически опускаются при использовании описанных здесь имен методов, за исключением 'nummissing'. Включать NaN значения, рассмотрите возможность использования дескриптора функции для метода, например, @sum вместо 'sum'.

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

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

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

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

'Var1'

"Var1"

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

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

{'Var1' 'Var2'}

["Var1" "Var2"]

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

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

1

[1 3 5]

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

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

[true false true]

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

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

@isnumeric

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

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

vartype('numeric')

Если входные данные являются таблицей T и укажите дескриптор функции для method который принимает более одного входного аргумента, необходимо указать datavars. datavars аргумент должен быть массивом ячеек, элементами которого являются любые параметры в таблице. Элементы массива ячеек указывают переменные таблицы, используемые для каждого ввода в метод. При каждом вызове функции по группам входными аргументами являются соответствующие табличные переменные элементов массива ячеек. Например:

  • groupsummary(T,groupvars,@(x,y) myFun(x,y),{"x1", "y1"}) вычисляет myFun(T.x1,T.y1) для каждой группы.

  • groupsummary(T,groupvars,@(x,y) myFun(x,y),{["x1" "x2"],["y1" "y2"]}) сначала вычисляет myfun(T.x1,T.y1) для каждой группы, а затем вычисляет myfun(T.x2,T.y2) для каждой группы.

Пример: groupsummary(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 = groupsummary(T,groupvars,groupbins,'IncludedEdge','right')

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

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

Индикатор отсутствующих групп указан как true или false. Когда значение параметра равно true, groupsummary отображает группы, состоящие из отсутствующих значений, таких как NaN. Когда значение параметра равно false, groupsummary не отображает отсутствующие группы.

Типы данных: logical

Индикатор пустых групп, указанный как true или false. Когда значение параметра равно false, groupsummary не отображает группы с нулевыми элементами. Когда значение параметра равно true, groupsummary отображает пустые группы.

Типы данных: logical

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

свернуть все

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

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

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

При предоставлении нескольких векторов группирования BG - клеточный массив, содержащий векторы столбцов равной длины. Информацию о группе можно найти, посмотрев на элементы по всем векторам в BG. Каждая группа сопоставляется с соответствующей строкой выходного массива B.

Количество групп для входных данных массива, возвращаемых в виде вектора столбца, содержащего количество элементов в каждой группе. Длина BC совпадает с длиной векторов столбцов группы, возвращенных в BG.

Совет

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

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

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