Main Content

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

groupfilter

按组筛选

说明

示例

G = groupfilter(T,groupvars,method) 根据 method 中的计算对表或时间表中的数据进行筛选,按 groupvars 中指定分组变量的唯一组合进行分组。method 参数是对每个非分组变量进行计算的函数句柄。输出 G 是一个表或时间表,仅包含满足 method 中的条件的 T 行。例如,G = groupfilter(T,'Trial',@(x) numel(x) > 5) 按照 TrialT 中的数据进行分组,并保留具有五次以上试验 (Trial) 的组的各行。

示例

G = groupfilter(T,groupvars,groupbins,method) 根据 groupbins 对数据分 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 的语法结合使用。

A 是向量或矩阵时,B = groupfilter(A,groupvars,method) 根据 groupvars 中的分组向量的各个唯一组合筛选数据。groupvars 可以是列向量、矩阵或列向量元胞数组。输出 B 是一个矩阵,包含满足 method 所定义条件的 A 的行。

示例

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

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

示例

[B,BG] = groupfilter(A,___) 还返回对应于 A 中未筛除行的分组向量行。

示例

全部折叠

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

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    

创建包含三个变量的表。

groupID = [1 2 3 1 2 3 1 2 3]';
height = [62 61 59 66 70 72 57 67 71]';
gender = ["M" "F" "F" "M" "M" "F" "M" "M" "M"]';
T = table(groupID,height,gender)
T=9×3 table
    groupID    height    gender
    _______    ______    ______

       1         62       "M"  
       2         61       "F"  
       3         59       "F"  
       1         66       "M"  
       2         70       "M"  
       3         72       "F"  
       1         57       "M"  
       2         67       "M"  
       3         71       "M"  

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

G1 = groupfilter(T,'groupID',@(x) min(x) >= 60,'height')
G1=3×3 table
    groupID    height    gender
    _______    ______    ______

       2         61       "F"  
       2         70       "M"  
       2         67       "M"  

返回成员均为男性的组的各行。

G2 = groupfilter(T,'groupID',@(x) all(x == "M"),'gender')
G2=3×3 table
    groupID    height    gender
    _______    ______    ______

       1         62       "M"  
       1         66       "M"  
       1         57       "M"  

按 ID 编号和性别分组,并返回包含每组中男性和女性最高身高的行。

G3 = groupfilter(T,{'groupID','gender'},@(x) x == max(x))
G3=5×3 table
    groupID    height    gender
    _______    ______    ______

       2         61       "F"  
       1         66       "M"  
       2         70       "M"  
       3         72       "F"  
       3         71       "M"  

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

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) myfunc 的语法,其中 myfunc 取决于 inputargs。例如,@(x) mean(x) 指定变量 x 作为 mean 函数的输入参数。您可以在此基础上定义筛选条件,例如 @(x) mean(x) > 10,该条件下将返回逻辑标量。此计算保留均值大于 10 的组的各行。有关详细信息,请参阅 创建函数句柄匿名函数

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

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

要指定此参数,必须先指定 groupbins,且参数的值适用于所有分组变量或向量的所有分 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"])

输出参数

全部折叠

输出表,以包含未筛除数据行的表或时间表的形式返回。

输出数组,以包含未筛除数据的向量或矩阵的形式返回。

数组输入数据的分组向量,以列向量或者列向量元胞数组的形式返回。BG 包含对应于 A 中未筛除行的分组向量行。

扩展功能

在 R2019b 中推出