Main Content

groupfilter

按组过滤

说明

表数据

示例

G = groupfilter(T,groupvars,method) 返回表或时间表 T 中满足 method 指定的按组过滤条件的行。过滤条件 method 是应用于每个非分组变量的函数句柄。组基于 groupvars 中各变量的行值划分,各组包含唯一值组合。例如,G = groupfilter(T,"Trial",@(x) numel(x) > 5) 按照 TrialT 中的数据进行分组,并保留具有五次以上试验 (Trial) 的组中的各行。

示例

G = groupfilter(T,groupvars,groupbins,method) 指定在分组前根据分 bin 方案 groupbinsgroupvars 中的行进行分 bin。例如,G = groupfilter(T,"SaleDate","year",@(x) numel(x) > 5) 按年份对 SaleDate 中的数据分 bin,并保留包含五个以上元素的 bin 的各行。

示例

G = groupfilter(___,datavars) 在上述任一语法的基础上指定要应用过滤方法的表变量。例如,G = groupfilter(T,"Trial",@(x) x == max(x),"Height") 保留 T 中对应于每次试验 (Trial) 最大高度 (Height) 的行。

G = groupfilter(___,"IncludedEdge",LR) 将包含的 bin 边界指定为 "left""right",以指示应包含 bin 区间的哪一端。您可以将 IncludeEdge 与上述任何指定 groupbins 的语法结合使用。

数组数据

B = groupfilter(A,groupvars,method) 返回向量或矩阵 A 中满足 method 指定的按组过滤条件的行。过滤条件 method 是应用于所有列向量的函数句柄。组基于 groupvars 中各列向量的行值划分,各组包含唯一组组合。

示例

B = groupfilter(A,groupvars,groupbins,method) 指定在分组前根据分 bin 方案 groupbinsgroupvars 中的行进行分 bin。

当指定 groupbins 时,B = groupfilter(A,groupvars,groupbins,method,"IncludedEdge",LR) 指定是否包含每个 bin 的左边界或右边界。

示例

[B,BG] = groupfilter(A,___) 还返回与 B 中的行对应的唯一分组向量组合。

示例

全部折叠

创建一个包含两个变量的表。

groupID = [1 1 1 2 2 3]';
sample = [3 1 2 9 8 5]';
T = table(groupID,sample)
T=6×2 table
    groupID    sample
    _______    ______

       1         3   
       1         1   
       1         2   
       2         9   
       2         8   
       3         5   

按 ID 编号进行分组,并且返回对应于具有两个以上采样的组的行。

Gnumel = groupfilter(T,"groupID",@(x) numel(x) > 2)
Gnumel=3×2 table
    groupID    sample
    _______    ______

       1         3   
       1         1   
       1         2   

返回所含采样介于 0 和 6 之间的组中的各行。

Gvals = groupfilter(T,"groupID",@(x) min(x) > 0 && max(x) < 6)
Gvals=4×2 table
    groupID    sample
    _______    ______

       1         3   
       1         1   
       1         2   
       3         5   

创建一个包含两个变量的表,这两个变量分别表示日期和温度。

daynum = [1 1 1 1 2 2 2 2]';
temp = [67 65 71 55 61 79 58 78]';
T = table(daynum,temp)
T=8×2 table
    daynum    temp
    ______    ____

      1        67 
      1        65 
      1        71 
      1        55 
      2        61 
      2        79 
      2        58 
      2        78 

按日期分组,并且返回每天最高的两个温度。

G = groupfilter(T,"daynum",@(x) ismember(x,maxk(x,2)))
G=4×2 table
    daynum    temp
    ______    ____

      1        67 
      1        71 
      2        79 
      2        78 

创建一个表,其中包含日期和对应的利润。

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

    04-Mar-2017     2032 
    02-Mar-2017     3071 
    15-Mar-2017     1185 
    10-Apr-2017     2587 
    14-Apr-2017     1998 
    30-Apr-2017     2899 
    25-May-2017     3112 
    29-May-2017      909 
    21-May-2017     2619 

按月对日期进行分组,返回与当月最大利润对应的行。

Gmax = groupfilter(T,"timeStamps","month",@(x) x == max(x))
Gmax=3×3 table
    timeStamps     profit    month_timeStamps
    ___________    ______    ________________

    02-Mar-2017     3071         Mar-2017    
    30-Apr-2017     2899         Apr-2017    
    25-May-2017     3112         May-2017    

返回月平均利润大于 2300 美元的组的各行。

Gavg = groupfilter(T,"timeStamps","month",@(x) mean(x) > 2300)
Gavg=3×3 table
    timeStamps     profit    month_timeStamps
    ___________    ______    ________________

    10-Apr-2017     2587         Apr-2017    
    14-Apr-2017     1998         Apr-2017    
    30-Apr-2017     2899         Apr-2017    

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

groupID = [1 2 3 1 2 3 1 2 3]';
Height = [62 61 59 66 70 72 57 67 71]';
HealthStatus = categorical(["Poor"; "Good"; "Fair"; "Poor"; "Fair"; "Excellent"; "Poor"; "Excellent"; "Fair"]);
T = table(groupID,Height,HealthStatus)
T=9×3 table
    groupID    Height    HealthStatus
    _______    ______    ____________

       1         62       Poor       
       2         61       Good       
       3         59       Fair       
       1         66       Poor       
       2         70       Fair       
       3         72       Excellent  
       1         57       Poor       
       2         67       Excellent  
       3         71       Fair       

按 ID 号分组,并返回成员身高均不低于 60 的组中的各行。

G1 = groupfilter(T,"groupID",@(x) min(x) >= 60,"Height")
G1=3×3 table
    groupID    Height    HealthStatus
    _______    ______    ____________

       2         61       Good       
       2         70       Fair       
       2         67       Excellent  

按 ID 号分组,并返回仅包含健康状况为 Poor 的成员的组中的各行。

G2 = groupfilter(T,"groupID",@(x) all(x == "Poor"),"HealthStatus")
G2=3×3 table
    groupID    Height    HealthStatus
    _______    ______    ____________

       1         62          Poor    
       1         66          Poor    
       1         57          Poor    

创建一个日期向量和一个与日期对应的利润值向量。

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

按星期几分组,并计算每组的最大利润。显示最大利润及其对应的组。

[maxDailyProfit,dayOfWeek] = groupfilter(profit,timeStamps, ...
    "dayname",@(x) x == max(x))
maxDailyProfit = 5×1

        3071
        1185
        2899
        3112
        2619

dayOfWeek = 5x1 categorical
     Thursday 
     Wednesday 
     Friday 
     Saturday 
     Tuesday 

输入参数

全部折叠

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

输入数组,指定为列向量或一组存储为矩阵的列向量。

分组变量或向量,指定为以下选项之一:

  • 对于数组输入数据,groupvars 可以是一个行数与 A 相同的列向量,也可以是一组以矩阵或元胞数组形式排列的列向量。

  • 对于表或时间表输入数据,groupvars 指示使用哪些变量来计算数据中的组。您可以使用下表中的任何选项来指定分组变量。

    选项描述示例
    变量名称

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

    'Var1'

    "Var1"

    变量名称的向量

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

    {'Var1' 'Var2'}

    ["Var1" "Var2"]

    变量索引的标量或向量

    表变量索引的标量或向量

    1

    [1 3 5]

    逻辑向量

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

    [true false true]

    函数句柄

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

    @isnumeric

    vartype 下标

    vartype 函数生成的表下标

    vartype("numeric")

示例: groupfilter(T,"Var3",method)

过滤方法,指定为函数句柄。

method 定义用于在每个组中过滤成员的函数。该函数必须返回逻辑标量或与输入数据具有相同行数的逻辑列向量,用于指示要选择的组成员。

  • 如果函数返回逻辑标量,则要么筛除组中的所有成员(当值为 false),要么不筛除任何成员(当值为 true)。

  • 如果函数返回逻辑向量,则对应元素为 false 的组成员将被过滤掉并保留对应元素为 true 的成员。

要定义函数句柄,请使用形式为 @(inputargs) mymethod 的语法,其中 mymethod 取决于 inputargs

  • 函数可以过滤与满足条件的组对应的行。例如,@(x) mean(x) > 10 只向输出传递与组均值大于 10 的组对应的行。

  • 函数可以过滤对应组中满足条件的行。例如,@(x) x == max(x) 只将与组中行的最大值对应的行传递给输出。

有关详细信息,请参阅 创建函数句柄匿名函数

groupfilter 一次性将方法应用于多个非分组变量时,则方法将为每个变量返回一个逻辑标量或向量。对于每一行,只有返回的所有标量或向量中的对应值均为 true 时,才会将该行传递给输出。

分 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 方法的元胞数组。

要对其进行操作的表变量,指定为下表中的选项之一。datavars 指示将过滤方法应用于输入表或时间表的哪些变量。未由 datavars 指定的其他变量会传递给输出,而不会对其进行操作。groupfilter 将过滤方法应用于指定的变量,并根据得到的结果从所有变量中删除行。当未指定 datavars 时,groupfilter 对每个非分组变量进行操作。

选项描述示例
变量名称

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

'Var1'

"Var1"

变量名称的向量

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

{'Var1' 'Var2'}

["Var1" "Var2"]

变量索引的标量或向量

表变量索引的标量或向量

1

[1 3 5]

逻辑向量

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

[true false true]

函数句柄

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

@isnumeric

vartype 下标

vartype 函数生成的表下标

vartype("numeric")

示例: groupfilter(T,groupvars,method,["Var1" "Var2" "Var4"])

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

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

输出参数

全部折叠

表或时间表输入数据的输出表,以表或时间表形式返回。G 包含 T 中满足按组过滤方法的行。

数组输入数据的输出数组,以向量或矩阵形式返回。B 包含 A 中满足按组过滤方法的行。

数组输入数据的分组向量,以列向量或列向量元胞数组形式返回。BG 包含与 B 中的行对应的唯一分组向量或分 bin 分组向量组合。

扩展功能

版本历史记录

在 R2019b 中推出

全部展开