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 指示使用哪些变量来计算数据中的组。您可以使用下表中的任何选项来指定分组变量。

    选项描述示例
    变量名称

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

    'Var1'

    "Var1"

    变量名称的向量

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

    {'Var1' 'Var2'}

    ["Var1" "Var2"]

    变量索引的标量或向量

    表变量索引的标量或向量

    1

    [1 3 5]

    逻辑向量

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

    [true false true]

    函数句柄

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

    @isnumeric

    vartype 下标

    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 方案,指定为以下选项之一:

  • "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 指定的其他变量会传递给输出,而不会对其进行操作。当未指定 datavars 时,grouptransform 对每个非分组变量进行操作。

选项描述示例
变量名称

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

'Var1'

"Var1"

变量名称的向量

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

{'Var1' 'Var2'}

["Var1" "Var2"]

变量索引的标量或向量

表变量索引的标量或向量

1

[1 3 5]

逻辑向量

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

[true false true]

函数句柄

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

@isnumeric

vartype 下标

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 边界,指定为 "left""right",指示包括 bin 区间的哪一边。

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

替换值指示符,指定为下列值之一:

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

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

输出参数

全部折叠

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

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

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

提示

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

扩展功能

版本历史记录

在 R2018b 中推出

全部展开