Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

grouptransform

按组变换

说明

表数据

G = grouptransform(T,groupvars,method) 返回变换后的数据,替换了表或时间表 T 中的非分组变量。method 中的按组计算适用于每个非分组变量。组基于 groupvars 中各变量的行值划分,各组包含唯一值组合。例如,G = grouptransform(T,"HealthStatus","norm") 使用 2-范数按健康状况对 T 中的数据进行归一化。

示例

G = grouptransform(T,groupvars,groupbins,method) 指定在分组前根据分 bin 方案 groupbinsgroupvars 中的行进行分 bin 并将 bin 作为附加变量追加到输出表中。例如,G = grouptransform(T,"SaleDate","year","rescale") 按销售年度分 bin,并将 T 中的数据缩放到范围 [0, 1] 内。

G = grouptransform(___,datavars) 在上述任一语法的基础上指定要应用方法的表变量。

示例

G = grouptransform(___,Name,Value) 使用一个或多个名称-值参量为上述任一语法指定其他属性。例如,G = grouptransform(T,"Temp","linearfill","ReplaceValues",false) 将填充的数据追加为 T 的附加变量,而不是替换非分组变量。

数组数据

`B = grouptransform(A,groupvars,method) 返回变换后的数据,替换了输入向量或矩阵 A 中的列向量。method 中的按组计算应用于 A 中的所有列向量。组基于 groupvars 中各列向量的行值划分,各组均包含唯一值组合。

示例

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

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

示例

[B,BG] = grouptransform(A,___) 还返回与 B 中的行对应的分组向量或分 bin 的分组向量的值。

示例

全部折叠

创建一个包含三个团队的进度状态的时间表。

timeStamp = days([1 1 1 2 2 2 3 3 3]');
teamNumber = [1 2 3 1 2 3 1 2 3]';
percentComplete = [14.2 28.1 11.5 NaN NaN 19.3 46.1 51.2 30.3]';
T = timetable(timeStamp,teamNumber,percentComplete)
T=9×2 timetable
    timeStamp    teamNumber    percentComplete
    _________    __________    _______________

    1 day            1              14.2      
    1 day            2              28.1      
    1 day            3              11.5      
    2 days           1               NaN      
    2 days           2               NaN      
    2 days           3              19.3      
    3 days           1              46.1      
    3 days           2              51.2      
    3 days           3              30.3      

使用线性插值为每个团队填充用 NaN 指示的缺失状态百分比。

G = grouptransform(T,"teamNumber","linearfill","percentComplete")
G=9×2 timetable
    timeStamp    teamNumber    percentComplete
    _________    __________    _______________

    1 day            1               14.2     
    1 day            2               28.1     
    1 day            3               11.5     
    2 days           1              30.15     
    2 days           2              39.65     
    2 days           3               19.3     
    3 days           1               46.1     
    3 days           2               51.2     
    3 days           3               30.3     

要将填充的数据追加到原始表而不是替换 percentComplete 变量,请使用 ReplaceValues

Gappend = grouptransform(T,"teamNumber","linearfill","percentComplete","ReplaceValues",false)
Gappend=9×3 timetable
    timeStamp    teamNumber    percentComplete    linearfill_percentComplete
    _________    __________    _______________    __________________________

    1 day            1              14.2                     14.2           
    1 day            2              28.1                     28.1           
    1 day            3              11.5                     11.5           
    2 days           1               NaN                    30.15           
    2 days           2               NaN                    39.65           
    2 days           3              19.3                     19.3           
    3 days           1              46.1                     46.1           
    3 days           2              51.2                     51.2           
    3 days           3              30.3                     30.3           

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

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]';
T = table(timeStamps,profit)
T=10×2 table
    timeStamps     profit
    ___________    ______

    04-Mar-2017     2032 
    02-Mar-2017     3071 
    15-Mar-2017     1185 
    10-Mar-2017     2587 
    14-Mar-2017     1998 
    31-Mar-2017     2899 
    25-Mar-2017     3112 
    29-Mar-2017      909 
    21-Mar-2017     2619 
    18-Mar-2017     3085 

按星期几分 bin,并使用 2-范数对利润进行归一化。

G = grouptransform(T,"timeStamps","dayname","norm")
G=10×3 table
    timeStamps     profit     dayname_timeStamps
    ___________    _______    __________________

    04-Mar-2017    0.42069        Saturday      
    02-Mar-2017          1        Thursday      
    15-Mar-2017    0.79344        Wednesday     
    10-Mar-2017    0.66582        Friday        
    14-Mar-2017    0.60654        Tuesday       
    31-Mar-2017    0.74612        Friday        
    25-Mar-2017    0.64428        Saturday      
    29-Mar-2017    0.60864        Wednesday     
    21-Mar-2017    0.79506        Tuesday       
    18-Mar-2017    0.63869        Saturday      

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

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

按星期几分 bin,并使用 2-范数对利润进行归一化。显示转换后的数据及其对应的组。

[normDailyProfit,dayName] = grouptransform(profit,timeStamps,"dayname","norm")
normDailyProfit = 10×1

    0.4207
    1.0000
    0.7934
    0.6658
    0.6065
    0.7461
    0.6443
    0.6086
    0.7951
    0.6387

dayName = 10x1 categorical
     Saturday 
     Thursday 
     Wednesday 
     Friday 
     Tuesday 
     Friday 
     Saturday 
     Wednesday 
     Tuesday 
     Saturday 

输入参数

全部折叠

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

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

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

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

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

    索引方案示例

    变量名称:

    • 字符串、字符向量或元胞数组

    • pattern 对象

    • "A"'A' - 名为 A 的变量

    • ["A","B"]{'A','B'} - 两个名为 AB 的变量

    • "Var"+digitsPattern(1) - 变量名为 "Var" 后跟一个数字

    变量索引:

    • 引用变量在表中位置的索引编号

    • 由数字组成的向量

    • 逻辑向量。通常,此向量的长度与变量的数目相同,但可以省略尾部的 0false

    • 3 - 表中的第三个变量

    • [2 3] - 表中的第二个和第三个变量

    • [false false true] - 第三个变量

    函数句柄:

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

    • @isnumeric - 所有包含数值的变量

    变量类型:

    • vartype 下标,用于选择指定类型的变量

    • vartype("numeric") - 所有包含数值的变量

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

变换方法,指定为下列值之一:

方法

描述

"zscore"

对数据进行归一化,使其均值为 0、标准差为 1

"norm"

按 2-范数对数据进行归一化

"meancenter"

对数据进行归一化,使其均值为 0

"rescale"

将范围重新缩放为 [0,1]

"meanfill"

使用组数据的均值填充缺失值

"linearfill"

基于非缺失组数据进行线性插值来填充缺失值

您还可以指定函数句柄,该句柄返回其第一个维度的长度为 1 或行数与输入数据相同的一个数组。如果函数返回其第一个维度的长度等于 1 的数组,则 grouptransform 会重复该值,使输出与输入具有相同的行数。

数据类型: char | string | function_handle

分组变量或向量的分 bin 方案,指定为以下一种或多种分 bin 方法。要对所有分组变量或向量应用相同的分 bin 方法,请指定一种分 bin 方法。要对每个分组变量或向量应用不同的分 bin 方法,请指定一个由分 bin 方法组成的元胞数组,其中每个元胞包含对应分组变量或向量的分 bin 方法。

  • "none" - 无分 bin。

  • 由 bin 边界组成的向量 - bin 边界定义 bin。对于 datetime 分组变量或向量,可以将边界指定为数值或 datetime 值。

  • bin 数目 - 该数目确定要创建多少个等间距 bin。可以将 bin 数目指定为正整数标量。

  • 时间长度(bin 宽度)- 时间长度确定每个 bin 的宽度。对于 datetimeduration 分组变量或向量,可以将 bin 宽度指定为 durationcalendarDuration 标量。

  • 时间单位的名称(bin 宽度)- 时间单位的名称确定每个 bin 的宽度。对于 datetimeduration 分组变量或向量,可以将 bin 宽度指定为下表中的选项之一。

    描述数据类型
    "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

要对其进行操作的表变量,指定为下表中的选项之一。datavars 指示将方法应用于输入表或时间表的哪些变量。未由 datavars 指定的其他变量会传递给输出,而不会对其进行操作。当未指定 datavars 时,grouptransform 对每个非分组变量进行操作。

索引方案示例

变量名称:

  • 字符串、字符向量或元胞数组

  • pattern 对象

  • "A"'A' - 名为 A 的变量

  • ["A","B"]{'A','B'} - 两个名为 AB 的变量

  • "Var"+digitsPattern(1) - 变量名为 "Var" 后跟一个数字

变量索引:

  • 引用变量在表中位置的索引编号

  • 由数字组成的向量

  • 逻辑向量。通常,此向量的长度与变量的数目相同,但可以省略尾部的 0false

  • 3 - 表中的第三个变量

  • [2 3] - 表中的第二个和第三个变量

  • [false false true] - 第三个变量

函数句柄:

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

  • @isnumeric - 所有包含数值的变量

变量类型:

  • vartype 下标,用于选择指定类型的变量

  • vartype("numeric") - 所有包含数值的变量

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

名称-值参数

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

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

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

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

在分 bin 方案中包括 bin 边界,指定为 "left""right",指示包括 bin 区间的哪一边。

仅当指定了 groupbins 时,才能指定 IncludedEdge,并且该值适用于所有分组变量或向量的所有分 bin 方法。

替换值的选项,指定为以下值之一:

  • true1 - 用包含变换数据的表变量或列向量替换输入数据中的非分组表变量或列向量。

  • false0 - 将包含变换数据的表变量或列向量追加到输入数据。

输出参量

全部折叠

表或时间表输入数据的输出表,以表或时间表形式返回。G 包含每个组的变换后的数据。

数组输入数据的输出数组,以向量或矩阵形式返回。B 包含变换后的数据,替换了非分组向量。

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

提示

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

扩展功能

版本历史记录

在 R2018b 中推出

全部展开