Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

groupsummary

组汇总计算

说明

示例

G = groupsummary(T,groupvars) 返回一个表,其中包含表或时间表 T 中要进行计算的数据组,以及每组中的元素数。一个组包含 groupvars 中的分组变量的各个唯一组合。例如,G = groupsummary(T,'Gender') 返回变量 GenderMale 元素的数量和 Female 元素的数量。

示例

G = groupsummary(T,groupvars,method) 还返回 method 所指定计算的结果。例如,G = groupsummary(T,'Gender','median') 除了返回每个组中的元素数量外,还返回 T 中两个性别的所有非分组变量的中位数。

示例

G = groupsummary(T,groupvars,method,datavars) 指定要应用计算的变量。

G = groupsummary(T,groupvars,groupbins) 指定如何为 groupvars 中的数据分 bin。例如,G = groupsummary(T,'SaleDate','year') 根据分组变量 SaleDate 给出每年 T 中所有销售的组计数。

G = groupsummary(T,groupvars,groupbins,method) 根据 groupbins 对数据分 bin 并应用 method 中指定的计算。

示例

G = groupsummary(T,groupvars,groupbins,method,datavars) 根据 groupbins 对数据分 bin,并指定要应用计算的变量。

示例

G = groupsummary(___,Name,Value) 使用一个或多个名称-值对组为上述语法指定其他分组属性。例如,G = groupsummary(T,'Category1','IncludeMissingGroups',false) 将排除由缺失 categorical 数据(通过 <undefined> 指示)构成的组。

A 是向量或矩阵时,B = groupsummary(A,groupvars,method) 根据 groupvars 中的分组向量的各个唯一组合返回计算结果。groupvars 可以是列向量、矩阵或列向量元胞数组。

示例

B = groupsummary(A,groupvars,groupbins,method) 根据 groupbins 对数据分 bin。

示例

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    

根据指定的 bin 对数据进行分组。

创建一个时间表,其中包含一个月内某些日期的销售信息。

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      

按售出的商品总量分组计算平均利润,并将各组按商品编号分成 bin 区间。

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 的前两个输入参数说明要关联的数据,第三个参数说明滞后大小,第四个参数说明归一化的类型。对于每组计算,传入 xcov 中的 xy 参数由 ["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 函数指定了函数句柄时,您必须指定 datavarsdatavars 参数必须为元胞数组,其元素指示用于方法的每个输入的表变量。每次按组调用该函数时,输入参数是元胞数组元素的对应表变量。例如:

  • 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 对每个非分组变量进行操作。

选项说明示例
变量名称

指定单个表变量名称的字符向量或标量字符串

'Var1'

"Var1"

变量名称的向量

字符向量元胞数组或字符串数组,其中每个元素表示一个表变量名称

{'Var1' 'Var2'}

["Var1" "Var2"]

变量索引的标量或向量

表变量索引的标量或向量

1

[1 3 5]

逻辑向量

逻辑向量,每个元素分别对应一个表变量,其中 true 指示包括对应变量,false 指示不包括对应变量。

[true false true]

函数句柄

函数句柄,以表变量作为输入并返回逻辑标量

@isnumeric

vartype 下标

vartype 函数生成的表下标

vartype('numeric')

当输入数据是表 T 并且您为接受多个输入参数的 method 函数指定了函数句柄时,您必须指定 datavarsdatavars 参数必须为元胞数组,其元素是表中的任一选项。元胞数组元素指示用于方法的每个输入的表变量。每次按组调用该函数时,输入参数是元胞数组元素的对应表变量。例如:

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

分 bin 方案,指定为下列选项之一:

  • 'none',表示不分 bin

  • bin 边界列表,指定为数值向量,或 datetime 分组变量或向量的 datetime 向量

  • bin 的数量,指定为整数标量

  • 持续时间,指定为 durationcalendarDuration 类型的标量,指示 bin 的宽度(仅限于 datetimeduration 分组变量或向量)

  • 时间 bin(仅适用于 datetimeduration 分组变量或向量),指定为下列字符向量之一:

    说明数据类型
    'second'

    每个 bin 是 1 秒。

    datetimeduration
    'minute'

    每个 bin 是 1 分钟。

    datetimeduration
    'hour'

    每个 bin 是 1 小时。

    datetimeduration
    'day'

    每个 bin 表示 1 个日历日。此值将夏令时变化考虑在内。

    datetimeduration
    'week'每个 bin 是 1 个日历周。仅限 datetime
    'month'每个 bin 是 1 个日历月。仅限 datetime
    'quarter'每个 bin 是 1 个日历季度。仅限 datetime
    'year'

    每个 bin 表示 1 个日历年。此值将闰日考虑在内。

    datetimeduration
    'decade'每个 bin 是 1 个十年(10 个日历年)。仅限 datetime
    'century'每个 bin 是 1 个世纪(100 个日历年)。仅限 datetime
    'secondofminute'

    bin 从 0 到 59 秒。

    仅限 datetime
    'minuteofhour'

    bin 从 0 到 59 分钟。

    仅限 datetime
    'hourofday'

    bin 从 0 到 23 小时。

    仅限 datetime
    'dayofweek'

    bin 从 1 到 7 日。一周的第一天是星期天。

    仅限 datetime
    'dayname'bin 是一周中某天的全称,例如 'Sunday'仅限 datetime
    'dayofmonth'bin 从 1 到 31 天。仅限 datetime
    'dayofyear'bin 从 1 到 366 天。仅限 datetime
    'weekofmonth'bin 从 1 到 6 周。仅限 datetime
    'weekofyear'bin 从 1 到 54 周。仅限 datetime
    'monthname'bin 是完整的月份名称,如 'January'仅限 datetime
    'monthofyear'

    bin 从 1 到 12 个月。

    仅限 datetime
    'quarterofyear'bin 从 1 到 4 个季度。仅限 datetime

  • 列出每个分组变量或向量的分 bin 规则的元胞数组

如果指定多个分组变量,则可以提供应用于所有分组变量的单个分 bin 规则,或者提供包含针对每个分组变量(例如 {'none',[0 2 4 Inf]})的分 bin 方法的元胞数组。

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: G = groupsummary(T,groupvars,groupbins,'IncludedEdge','right')

包括的 bin 边界,指定为 'left''right',指示包括 bin 区间的哪一边。

此名称-值对组只能在指定 groupbins 时指定,并且值适用于所有分组变量或向量的所有分 bin 方案。

缺失组指示符,指定为 truefalse。当参数值为 true 时,groupsummary 显示由缺失值(例如 NaN)组成的组。当参数值为 false 时,groupsummary 不显示缺失组。

数据类型: logical

空组指示符,指定为 truefalse。当参数值为 false 时,groupsummary 不显示元素数为零的组。当参数值为 true 时,groupsummary 显示空组。

数据类型: logical

输出参数

全部折叠

输出表,返回为包含每个组的指定计算结果的表。

输出数组,以包含组计算结果的向量或矩阵形式返回。指定多个方法时,groupsummary 按照计算的列出顺序水平串联计算。

数组输入数据的组,以列向量或列向量元胞数组形式返回,每个列向量对应于一个分组向量。

当您提供多个分组向量时,BG 是包含相等长度的列向量的元胞数组。通过在 BG 的所有向量中按行查看元素,可以找到组信息。每组映射到输出数组 B 的对应行。

数组输入数据的组计数,返回为一个列向量,其中包含每个组中的元素数。BC 的长度与在 BG 中返回的组列向量的长度相同。

提示

  • 当多次调用 groupsummary 时,请考虑尽可能将分组变量转换为 categoricallogical 类型以提高性能。例如,如果您有 char 类型的分组变量(例如 Gender,其中元素为 'Male''Female'),您可以使用命令 categorical(Gender) 将其转换为分类值。

扩展功能

在 R2018a 中推出