Main Content

groupcounts

分组元素的数量

说明

表数据

示例

G = groupcounts(T,groupvars) 返回表或时间表 T 中的唯一分组变量组合、每组中的成员数以及每组所占的数据百分比( 范围为 [0, 100])。组基于 groupvars 中各变量的行值划分,各组包含唯一值组合。输出表的每一行对应一个组。例如,G = groupcounts(T,"HealthStatus") 返回一个表,其中包含按变量 HealthStatus 分组的每个组的计数和百分比。

示例

G = groupcounts(T,groupvars,groupbins) 指定在分组前根据分 bin 方案 groupbinsgroupvars 中的行进行分 bin。例如,G = groupcounts(T,"SaleDate","year") 根据分组变量 SaleDate 返回 T 中所有销售每一年的组计数和组百分比。

示例

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

数组数据

B = groupcounts(A) 返回向量、矩阵或元胞数组 A 中每组的成员数。组基于 A 中各列向量的行值划分,各组包含唯一值组合。B 的每一行包含一个组的计数。

B = groupcounts(A,groupbins) 指定在分组前根据分 bin 方案 groupbins 对数据进行分 bin。

B = groupcounts(___,Name,Value) 使用一个或多个名称-值参数为上述任一输入数组语法指定其他分组属性。

示例

[B,BG,BP] = groupcounts(A,___) 返回其他组信息。BG 是与 B 中的行相对应的唯一分组向量组合。BPB 中每个组计数所表示的数据的百分比。百分比范围为 [0, 100]。

示例

全部折叠

基于表数据计算每个组中的元素数。

创建一个包含八个人信息的表 T

HealthStatus = categorical(["Poor"; "Good"; "Fair"; "Fair"; "Poor"; "Excellent"; "Good"; "Excellent"]);
Smoker = logical([1; 0; 0; 1; 1; 0; 0; 1]);
Weight = [176; 153; 131; 133; 119; 120; 140; 129];
T = table(HealthStatus,Smoker,Weight)
T=8×3 table
    HealthStatus    Smoker    Weight
    ____________    ______    ______

     Poor           true       176  
     Good           false      153  
     Fair           false      131  
     Fair           true       133  
     Poor           true       119  
     Excellent      false      120  
     Good           false      140  
     Excellent      true       129  

根据健康状况对个人进行分组,并返回每组中的人数和百分比。

G1 = groupcounts(T,"HealthStatus")
G1=4×3 table
    HealthStatus    GroupCount    Percent
    ____________    __________    _______

     Excellent          2           25   
     Fair               2           25   
     Good               2           25   
     Poor               2           25   

按健康状况和是否吸烟对个人进行分组,并返回每组中的人数和百分比。默认情况下,groupcounts 会隐藏元素为零的组,因此不会返回分组变量值的某些唯一组合。

G2 = groupcounts(T,["HealthStatus","Smoker"])
G2=6×4 table
    HealthStatus    Smoker    GroupCount    Percent
    ____________    ______    __________    _______

     Excellent      false         1          12.5  
     Excellent      true          1          12.5  
     Fair           false         1          12.5  
     Fair           true          1          12.5  
     Good           false         2            25  
     Poor           true          2            25  

要为每个组返回一行,包括元素数为零的组,请将 IncludeEmptyGroups 指定为 true

G3 = groupcounts(T,["HealthStatus","Smoker"],"IncludeEmptyGroups",true)
G3=8×4 table
    HealthStatus    Smoker    GroupCount    Percent
    ____________    ______    __________    _______

     Excellent      false         1          12.5  
     Excellent      true          1          12.5  
     Fair           false         1          12.5  
     Fair           true          1          12.5  
     Good           false         2            25  
     Good           true          0             0  
     Poor           false         0             0  
     Poor           true          2            25  

根据指定的分 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]';
ItemsSold = [14 13 8 5 10 16 8 6 7 11]';
TT = timetable(TimeStamps,Profit,ItemsSold)
TT=10×2 timetable
    TimeStamps     Profit    ItemsSold
    ___________    ______    _________

    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,计算每个分 bin 的组计数。

G = groupcounts(TT,"ItemsSold",[0 4 8 12 16])
G=3×3 table
    disc_ItemsSold    GroupCount    Percent
    ______________    __________    _______

       [4, 8)             3           30   
       [8, 12)            4           40   
       [12, 16]           3           30   

计算按星期几分 bin 的组计数。

G = groupcounts(TT,"TimeStamps","dayname")
G=5×3 table
    dayname_TimeStamps    GroupCount    Percent
    __________________    __________    _______

        Tuesday               2           20   
        Wednesday             2           20   
        Thursday              1           10   
        Friday                2           20   
        Saturday              3           30   

确定向量中哪些元素出现多次。

创建一个值介于 1 和 5 之间的列向量。

A = [1 1 2 2 3 5 3 3 1 4]';

确定向量中的唯一组,并对组成员进行计数。

[B,BG] = groupcounts(A)
B = 5×1

     3
     2
     3
     1
     1

BG = 5×1

     1
     2
     3
     4
     5

通过为计数大于 1 的组创建逻辑索引,确定向量中哪些元素出现多次。对组进行索引以返回重复的向量元素。

duplicates = BG(B > 1)
duplicates = 3×1

     1
     2
     3

按健康状况和是否吸烟分组将一群人分组并计算组计数。

将八个人的信息存储为三个不同类型的向量。

HealthStatus = categorical(["Poor"; "Good"; "Fair"; "Fair"; "Poor"; "Excellent"; "Good"; "Excellent"]);
Smoker = logical([1; 0; 0; 1; 1; 0; 0; 1]);
Weight = [176; 153; 131; 133; 119; 120; 140; 129];

按健康状况和是否吸烟分组,计算组计数。指定三个输出,以同时返回组 BG 和组计数百分比 BP

BG 是包含两个向量的元胞数组,按行查看向量中的元素即可找到对应组的描述。例如,BG{1} 的第一行表示第一组中的人健康状况为 ExcellentBG{2} 的第一行表示他们不吸烟。最后,BP 包含 BG 中对应组的每个组中的成员数百分比。

[B,BG,BP] = groupcounts({HealthStatus,Smoker},"IncludeEmptyGroups",true);
B
B = 8×1

     1
     1
     1
     1
     2
     0
     0
     2

BG{1}
ans = 8x1 categorical
     Excellent 
     Excellent 
     Fair 
     Fair 
     Good 
     Good 
     Poor 
     Poor 

BG{2}
ans = 8x1 logical array

   0
   1
   0
   1
   0
   1
   0
   1

BP
BP = 8×1

   12.5000
   12.5000
   12.5000
   12.5000
   25.0000
         0
         0
   25.0000

输入参数

全部折叠

输入表,指定为表或时间表。

输入数组,指定为列向量、存储为矩阵的列向量组,或由列向量、字符行向量或矩阵组成的元胞数组。

分组变量或向量,指定为下表中的选项之一。对于表或时间表输入数据,groupvars 指示使用哪些变量来计算数据中的组。不会对 groupvars 未指定的其他变量进行操作,也不会将其传递到输出。

选项描述示例
变量名称

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

'Var1'

"Var1"

变量名称的向量

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

{'Var1' 'Var2'}

["Var1" "Var2"]

变量索引的标量或向量

表变量索引的标量或向量

1

[1 3 5]

逻辑向量

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

[true false true]

函数句柄

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

@isnumeric

vartype 下标

vartype 函数生成的表下标

vartype("numeric")

示例: groupcounts(T,"Var3")

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

  • "none",表示不分 bin

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

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

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

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

  • 时间 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 方法,或者提供包含针对每个分组变量或向量(例如 {"none",[0 2 4 Inf]})的分 bin 方法的元胞数组。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

示例: G = groupcounts(T,groupvars,groupbins,IncludedEdge="right")

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: G = groupcounts(T,groupvars,groupbins,"IncludedEdge","right")

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

要指定名称-值参数,必须先指定 groupbins,且参数的值适用于所有分组变量或向量的所有分 bin 方案。

缺失值组指示符,指定为数值或逻辑值 1 (true) 或 0 (false)。当 IncludeMissingGroups 的值为 true 时,groupcounts 显示由缺失值(例如 NaN)组成的组。当 IncludeMissingGroups 的值为 false 时,groupcounts 不显示缺失值组。

空组指示符,指定为数值或逻辑值 0 (false) 或 1 (true)。当 IncludeEmptyGroups 的值为 false 时,groupcounts 不显示元素数为零的组。当 IncludeEmptyGroups 的值为 true 时,groupcounts 显示空组。

输出参数

全部折叠

表或时间表输入数据的输出表,返回为一个表。G 包含计算的组、每个组中的元素数以及每个组计数表示的百分比。对于单个分组变量,输出组根据带 "sorted" 选项的 unique 函数返回的顺序进行排序。

数组输入数据的组计数,返回为一个列向量,B 中包含每个组中的元素数。

数组输入数据的组,以列向量或列向量元胞数组形式返回。对于单个分组向量,输出组根据带 "sorted" 选项的 unique 函数返回的顺序进行排序。

对于多个输入向量,BG 是包含相等长度的列向量的元胞数组。每个组的信息包含在 BG 各个向量对应的行元素中。每组映射到输出数组 B 的对应行。

数组输入数据的组计数百分比,以列向量形式返回。BP 包含 B 中每个组在 [0, 100] 范围内的百分比。

提示

  • 当多次调用 groupcounts 时,请考虑尽可能将分组变量转换为 categoricallogical 类型以提高性能。例如,如果您有字符串数组分组变量(例如 HealthStatus,其中元素为 "Poor""Fair""Good""Excellent"),您可以使用命令 categorical(HealthStatus) 将其转换为分类变量。

扩展功能

版本历史记录

在 R2019a 中推出

全部展开