按组计算
说明
通过按组计算任务,您能够以交互方式对数据执行分组,并针对每个组计算摘要统计量、执行变换或应用过滤器。该任务会自动为您的实时脚本生成 MATLAB® 代码。
使用此任务,您可以:
在数组、表或时间表中定义数据组。
根据每个分组汇总、变换或过滤数据。
输出一个包含计算结果的新表或时间表。
相关函数
按组计算生成使用 groupsummary
、grouptransform
和 groupfilter
函数的代码。

打开任务
要将按组计算任务添加到 MATLAB 编辑器中的实时脚本,请执行以下操作:
在实时编辑器选项卡上,选择任务 > 按组计算。
在脚本的代码块中,键入相关关键字,例如
group
。从建议的命令自动填充项中选择按组计算。
示例
通过以交互方式对数据分组、指定要运算的变量以及使用实时编辑器中的按组计算任务计算统计量来汇总数据。
使用示例文件 outages.csv
创建一个时间表。该文件包含六列表示电力公司停电信息的数据。将 Region
和 Cause
列向变量转换为分类数组并显示时间表。
outages = readtimetable("outages.csv");
outages.Region = categorical(outages.Region);
outages.Cause = categorical(outages.Cause)
outages=1468×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
________________ _________ ______ __________ ________________ _______________
2002-02-01 12:18 SouthWest 458.98 1.8202e+06 2002-02-07 16:50 winter storm
2003-01-23 00:49 SouthEast 530.14 2.1204e+05 NaT winter storm
2003-02-07 21:15 SouthEast 289.4 1.4294e+05 2003-02-17 08:14 winter storm
2004-04-06 05:44 West 434.81 3.4037e+05 2004-04-06 06:10 equipment fault
2002-03-16 06:18 MidWest 186.44 2.1275e+05 2002-03-18 23:23 severe storm
2003-06-18 02:49 West 0 0 2003-06-18 10:54 attack
2004-06-20 14:39 West 231.29 NaN 2004-06-20 19:16 equipment fault
2002-06-06 19:28 West 311.86 NaN 2002-06-07 00:51 equipment fault
2003-07-16 16:23 NorthEast 239.93 49434 2003-07-17 01:12 fire
2004-09-27 11:09 MidWest 286.72 66104 2004-09-27 16:37 equipment fault
2004-09-05 17:48 SouthEast 73.387 36073 2004-09-05 20:46 equipment fault
2004-05-21 21:45 West 159.99 NaN 2004-05-22 04:23 equipment fault
2002-09-01 18:22 SouthEast 95.917 36759 2002-09-01 19:12 severe storm
2003-09-27 07:32 SouthEast NaN 3.5517e+05 2003-10-04 07:02 severe storm
2003-11-12 06:12 West 254.09 9.2429e+05 2003-11-17 02:04 winter storm
2004-09-18 05:54 NorthEast 0 0 NaT equipment fault
⋮
在实时编辑器中打开按组计算任务。要按发生停电的五个区域对数据进行分组,请选择 outages
作为输入数据,并按 Region
变量的唯一值进行分组。然后,通过在计算数据字段中选择所有数值变量,对 Loss
和 Customers
变量执行计算。
按组计算任务可以针对组执行三种不同类型的计算。要汇总停电数据,请将计算类型设置为按组计算统计量。然后,要计算数值变量 Loss
和 Customers
的均值和最大值,请使用计算字段选择均值和最大值方法。
生成的时间表包含每个区域停电事件的分组观测值计数、平均电力损失、最大电力损失、平均受影响客户数量和最大受影响客户数量。
outageStats=5×6 table
Region GroupCount mean_Loss max_Loss mean_Customers max_Customers
_________ __________ _________ ________ ______________ _____________
MidWest 142 1137.7 23141 2.4015e+05 3.972e+06
NorthEast 557 551.65 23418 1.4917e+05 5.9689e+06
SouthEast 389 495.35 8767.3 1.6776e+05 2.2249e+06
SouthWest 26 493.88 2796 2.6975e+05 1.8202e+06
West 354 433.37 16659 1.5201e+05 4.26e+06
通过在实时编辑器中使用按组计算任务以交互方式对数据进行分组、指定要对其执行运算的变量以及应用变换操作,改善数据的可解释性或外观。
使用示例文件 outages.csv
创建一个时间表。该文件包含六列表示电力公司停电信息的数据。将 Region
和 Cause
列向变量转换为分类数组并显示时间表。
outages = readtimetable("outages.csv");
outages.Region = categorical(outages.Region);
outages.Cause = categorical(outages.Cause)
outages=1468×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
________________ _________ ______ __________ ________________ _______________
2002-02-01 12:18 SouthWest 458.98 1.8202e+06 2002-02-07 16:50 winter storm
2003-01-23 00:49 SouthEast 530.14 2.1204e+05 NaT winter storm
2003-02-07 21:15 SouthEast 289.4 1.4294e+05 2003-02-17 08:14 winter storm
2004-04-06 05:44 West 434.81 3.4037e+05 2004-04-06 06:10 equipment fault
2002-03-16 06:18 MidWest 186.44 2.1275e+05 2002-03-18 23:23 severe storm
2003-06-18 02:49 West 0 0 2003-06-18 10:54 attack
2004-06-20 14:39 West 231.29 NaN 2004-06-20 19:16 equipment fault
2002-06-06 19:28 West 311.86 NaN 2002-06-07 00:51 equipment fault
2003-07-16 16:23 NorthEast 239.93 49434 2003-07-17 01:12 fire
2004-09-27 11:09 MidWest 286.72 66104 2004-09-27 16:37 equipment fault
2004-09-05 17:48 SouthEast 73.387 36073 2004-09-05 20:46 equipment fault
2004-05-21 21:45 West 159.99 NaN 2004-05-22 04:23 equipment fault
2002-09-01 18:22 SouthEast 95.917 36759 2002-09-01 19:12 severe storm
2003-09-27 07:32 SouthEast NaN 3.5517e+05 2003-10-04 07:02 severe storm
2003-11-12 06:12 West 254.09 9.2429e+05 2003-11-17 02:04 winter storm
2004-09-18 05:54 NorthEast 0 0 NaT equipment fault
⋮
在实时编辑器中打开按组计算任务。要按发生停电的十个原因对数据进行分组,请选择 outages
作为输入数据,并按 Cause
变量的唯一值进行分组。然后,将计算数据设置为 Loss
变量。
按组计算任务可以针对组执行三种不同类型的计算。要变换停电数据,请将计算类型设置为按组转换。然后,要填充缺失的功率损耗值,请将计算设置为用组均值填充缺失值方法。
生成的时间表包含停电数据,其中缺失的电力损失替换为出于相同原因停电的平均电力损失。
outageTransform=1468×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
________________ _________ ______ __________ ________________ _______________
2002-02-01 12:18 SouthWest 458.98 1.8202e+06 2002-02-07 16:50 winter storm
2003-01-23 00:49 SouthEast 530.14 2.1204e+05 NaT winter storm
2003-02-07 21:15 SouthEast 289.4 1.4294e+05 2003-02-17 08:14 winter storm
2004-04-06 05:44 West 434.81 3.4037e+05 2004-04-06 06:10 equipment fault
2002-03-16 06:18 MidWest 186.44 2.1275e+05 2002-03-18 23:23 severe storm
2003-06-18 02:49 West 0 0 2003-06-18 10:54 attack
2004-06-20 14:39 West 231.29 NaN 2004-06-20 19:16 equipment fault
2002-06-06 19:28 West 311.86 NaN 2002-06-07 00:51 equipment fault
2003-07-16 16:23 NorthEast 239.93 49434 2003-07-17 01:12 fire
2004-09-27 11:09 MidWest 286.72 66104 2004-09-27 16:37 equipment fault
2004-09-05 17:48 SouthEast 73.387 36073 2004-09-05 20:46 equipment fault
2004-05-21 21:45 West 159.99 NaN 2004-05-22 04:23 equipment fault
2002-09-01 18:22 SouthEast 95.917 36759 2002-09-01 19:12 severe storm
2003-09-27 07:32 SouthEast 697.41 3.5517e+05 2003-10-04 07:02 severe storm
2003-11-12 06:12 West 254.09 9.2429e+05 2003-11-17 02:04 winter storm
2004-09-18 05:54 NorthEast 0 0 NaT equipment fault
⋮
通过使用按组计算以交互方式对数据进行分组、指定要对其执行运算的变量以及应用组过滤器,关注数据集中的特定信息。
使用示例文件 outages.csv
创建一个时间表。该文件包含六列表示电力公司停电信息的数据。将 Region
和 Cause
列向变量转换为分类数组并显示时间表。
outages = readtimetable("outages.csv");
outages.Region = categorical(outages.Region);
outages.Cause = categorical(outages.Cause)
outages=1468×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
________________ _________ ______ __________ ________________ _______________
2002-02-01 12:18 SouthWest 458.98 1.8202e+06 2002-02-07 16:50 winter storm
2003-01-23 00:49 SouthEast 530.14 2.1204e+05 NaT winter storm
2003-02-07 21:15 SouthEast 289.4 1.4294e+05 2003-02-17 08:14 winter storm
2004-04-06 05:44 West 434.81 3.4037e+05 2004-04-06 06:10 equipment fault
2002-03-16 06:18 MidWest 186.44 2.1275e+05 2002-03-18 23:23 severe storm
2003-06-18 02:49 West 0 0 2003-06-18 10:54 attack
2004-06-20 14:39 West 231.29 NaN 2004-06-20 19:16 equipment fault
2002-06-06 19:28 West 311.86 NaN 2002-06-07 00:51 equipment fault
2003-07-16 16:23 NorthEast 239.93 49434 2003-07-17 01:12 fire
2004-09-27 11:09 MidWest 286.72 66104 2004-09-27 16:37 equipment fault
2004-09-05 17:48 SouthEast 73.387 36073 2004-09-05 20:46 equipment fault
2004-05-21 21:45 West 159.99 NaN 2004-05-22 04:23 equipment fault
2002-09-01 18:22 SouthEast 95.917 36759 2002-09-01 19:12 severe storm
2003-09-27 07:32 SouthEast NaN 3.5517e+05 2003-10-04 07:02 severe storm
2003-11-12 06:12 West 254.09 9.2429e+05 2003-11-17 02:04 winter storm
2004-09-18 05:54 NorthEast 0 0 NaT equipment fault
⋮
在实时编辑器中打开按组计算任务。要按停电发生的年份和地区对数据进行分组,请使用分组依据按年份对 OutageTime
变量进行分 bin,并按唯一值对 Region
变量进行分组。然后,通过选择计算数据字段中的 Loss
变量来计算功率损耗。
按组计算任务可以针对组执行三种不同类型的计算。要过滤停电数据,请将计算类型设置为按组过滤。然后,将计算设置为一个新局部函数,并通过编写一个函数来自定义过滤器,该函数为要保留的离群数据提供 true 结果,并为要滤除的非离群数据提供 false 结果。
生成的时间表仅包含停电离群数据,其中电力损失超出该年份和该地区平均电力损失的三个标准差。
outageFilter=159×6 timetable
OutageTime Region Loss Customers RestorationTime Cause year_OutageTime
________________ _________ ______ __________ ________________ _______________ _______________
2004-04-06 05:44 West 434.81 3.4037e+05 2004-04-06 06:10 equipment fault 2004
2002-06-06 19:28 West 311.86 NaN 2002-06-07 00:51 equipment fault 2002
2005-03-08 16:37 SouthEast 1339.2 4.3003e+05 2005-03-10 20:42 winter storm 2005
2004-07-02 09:16 MidWest 15128 2.0104e+05 2004-07-06 14:11 thunder storm 2004
2002-04-20 16:46 MidWest 23141 NaN NaT unknown 2002
2002-12-10 10:45 MidWest 14493 3.0879e+06 2002-12-11 18:06 unknown 2002
2002-05-18 11:04 MidWest 1389.1 1.3447e+05 2002-05-21 01:22 unknown 2002
2003-09-22 00:53 MidWest 3995.8 6.7808e+05 2003-09-23 03:45 unknown 2003
2005-11-05 12:46 NorthEast 2966.1 NaN 2005-11-06 21:40 unknown 2005
2002-08-17 09:05 NorthEast 21673 NaN 2002-08-19 21:45 unknown 2002
2004-09-16 19:42 NorthEast 4718 NaN NaT unknown 2004
2002-05-20 10:57 NorthEast 9116.6 2.4983e+06 2002-05-21 15:22 unknown 2002
2003-09-05 20:15 SouthEast 1700.1 1.6393e+05 2003-09-10 19:59 thunder storm 2003
2004-09-20 12:37 SouthEast 8767.3 2.2249e+06 2004-10-02 06:00 severe storm 2004
2005-09-14 15:45 SouthEast 1839.2 3.4144e+05 NaT severe storm 2005
2003-09-14 16:09 NorthEast 2011.3 6.9368e+05 2003-09-24 07:44 severe storm 2003
⋮
function tf = myFilterFcn(x) % x is the data in a group from one computation variable % tf is true, false, or a logical column vector with the same height as x tf = isoutlier(x); end
相关示例
参数
通过从分组依据下拉列表中选择有效的工作区分组变量来指定组。当数据包含在表或时间表中时,请另外选择要作为分组依据的表变量。您可以按唯一值分组或指定如何对数据进行 bin 运算。
从计算数据下拉列表中,选择要对其进行计算的工作区数据。当数据包含在表或时间表中时,请选择要对其进行计算的表变量。
选择以下计算选项之一:
计算类型 | 描述 |
---|---|
Compute stats by group | 数据的汇总(或聚合),如均值或最大值。您还可以通过提供局部函数名称或函数句柄来提供自定义函数。该函数必须按组返回一个其第一个维度长度为 1 的实体。有关详细信息,请参阅 groupsummary 。 |
Transform by group | 变换数据,例如,按 2-范数缩放数据或填充缺失数据。您还可以通过提供局部函数名称或函数句柄来提供自定义函数。该函数必须返回一个其第一个维度长度为 1 或行数与输入数据相同的实体。有关详细信息,请参阅 grouptransform 。 |
Filter by group | 通过提供定义过滤计算的局部函数或函数句柄来过滤每个组中的成员。该函数必须返回逻辑标量或与数据具有相同行数的逻辑列向量,用于指示要选择的组成员。如果函数返回逻辑标量,则要么滤除组中的所有成员(当值为 false 时),要么不滤除任何成员(当值为 true 时)。如果函数返回逻辑向量,则当对应的元素是 false 时滤除组的成员。当对应元素为 true 时,组成员将被保留。有关详细信息,请参阅 groupfilter 。 |
对于所有计算类型,您可以点击新建在实时脚本中创建一个用于定义计算的新函数。点击新建会自动将一个示例函数插入到实时脚本中,该示例函数使用适合所选计算类型的语法。如果您更改示例函数的名称,则要使用新函数名称,请从实时任务的下拉列表中重新选择方法。
版本历史记录
在 R2021b 中推出计算每组数据中不同非缺失元素的数量。选择按组计算统计量,然后指定唯一值的数目或全选计算方法。
如果输入包含的行数超过一百万,则此实时编辑器任务不会自动运行。在以前的版本中,对于任何大小的输入,该任务始终自动运行。如果输入包含大量的行,则由此任务生成的代码可能需要一点儿时间来运行(超过几秒)。
当任务不自动运行时,自动运行指示符会被禁用。您可以在需要时手动运行任务,也可以选择启用任务自动运行。
另请参阅
函数
实时编辑器任务
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)