MATLAB 中的高级表操作2025年3月17日 | 阅读 15 分钟 引言在数据分析和处理的领域,MATLAB 提供了丰富的工具和功能来高效地处理表格。随着我们深入探讨高级主题,我们会发现 MATLAB 在对表格进行排序、过滤、分组、聚合和连接方面所提供的多功能性和强大能力。在本综合指南中,我们将探讨这些高级主题,从而使您能够掌握 MATLAB 表格操作的艺术。 主题 | 描述 |
---|
排序和过滤 | | 数据排序 | 使用 sortrows 函数根据一个或多个列对表格进行排序。指定列和顺序(升序或降序)。 | 过滤数据 | 利用逻辑索引根据特定条件过滤行。使用比较运算符创建逻辑条件。 | | | 分组和聚合 | | 数据分组 | 使用 findgroups 根据列创建唯一标识符。 | 数据聚合 | 使用 splitapply 将函数(例如 mean、sum、median)应用于数据组。获取每组的聚合值。 | | | 连接表格 | | Inner Join | 使用 innerjoin 根据指定列中的匹配值合并两个表格,仅保留匹配的行。 | Outer Join | 使用 outerjoin 合并表格,同时保留两个表格中的所有行,用 NaN 或指定值填充缺失值。 | | | 删除重复项 | | 识别重复项 | 使用 find groups 后跟 splitapply 来查找具有重复值的行,基于相同的行创建组。 | 删除重复项 | 利用 unique 函数删除重复行,同时保留第一次出现的行,从而获得干净的数据集。 | | | 拼接 | | 垂直连接 | 将表格堆叠在彼此之上以合并行。使用 [T1; T2] 进行具有相同变量的垂直连接。 | 水平连接 | 并排组合表格以添加更多列。使用 [T1, T2] 进行具有不同行但相同变量的水平连接。 | | | 缺失数据处理 | | 检测缺失数据 | 使用 ismissing 查找 NaN、undefined 或其他缺失值。提供一个指示缺失值的逻辑数组。 | 处理缺失数据 | 使用 fill missing 方法(如 'constant'、'linear' 或 'previous')填充缺失值。进行插值或替换。 |
排序和过滤表格当您需要组织和提取数据的特定子集时,对表格进行排序和过滤是基本操作。MATLAB 提供了一系列函数来根据列值对表格进行排序以及根据特定条件过滤行。 排序表格排序允许您根据一个或多个列中的值按指定顺序排列表格的行。MATLAB 的 sortrows 函数是此目的的强大工具。 按单列排序按“Age”列升序对 T 表格进行排序,可以将行从最年轻到最年长的个体进行组织。此操作特别有助于深入了解基于年龄的趋势或模式。 示例 输出  说明 创建示例表格 T - 我们创建一个包含“Name”、“Age”和“Height”列的示例表格 T。
- 每个列的值在单元格数组 Name、Age 和 Height 中提供。
显示原始表格 T - 脚本使用 disp(T) 显示原始表格 T,显示初始数据。
按“Age”列对表格 T 进行排序 我们使用 sortrows(T, 'Age') 函数按“Age”列升序对表格 T 进行排序。 结果存储在变量 sorted_age_asc 中。 显示排序后的表格 - 我们使用 disp(sorted_age_asc) 显示排序后的表格 sorted_age_asc,显示按“Age”升序排序的表格。
按多列排序按多列排序可以更精细地组织数据。在上面的示例中,T 表格首先按“Group”列升序排序,然后按“Score”列降序排序。这种排列有助于识别每个组中得分最高的个体。 示例 输出  说明 创建示例表格 - 首先,我们创建一个包含“Name”、“Group”和“Score”列的示例表格 T。每一行代表一个人,包含他们的姓名、组和分数。
显示原始表格 对表格进行排序 接下来,我们使用 sortrows 函数对表格 T 进行排序: - 我们将“Group”指定为要排序的第一列,按升序 ('ascend')。
- 我们将“Score”指定为要排序的第二列,按降序 ('descend')。
这意味着 MATLAB 将首先按字母顺序('A'、'B'、'C' 等)按“Group”列对行进行排序,然后在每个组内,它将按“Score”列按降序(最高分在前)对行进行排序。 显示排序后的表格: 最后,我们显示排序后的表格 sorted_group_score 以查看排序结果。 过滤表格过滤表格允许您提取满足特定标准的行,例如选择特定年龄段的个体或隔离来自特定组的数据。 简单过滤如上所示的简单过滤操作能够根据简单的条件提取数据子集。按“Age”大于 30 进行过滤可以分离出属于特定年龄组的个体以供进一步分析。 示例 输出  说明 创建示例表格 T - 我们创建一个包含“Name”、“Age”和“Height”列的表格 T。
- 每一行代表一个人,包含他们的年龄和身高。
显示原始表格 T 按年龄过滤表格 - 我们过滤表格 T 以仅包含“Age”大于 30 的个体。
- 结果存储在变量 filtered_older_than_30 中。
显示过滤后的表格 - 我们显示过滤后的表格 filtered_older_than_30 以查看年龄大于 30 的个体。
复杂过滤复杂的过滤操作允许使用逻辑运算符(如 & (AND) 和 | (OR))组合多个条件。在上面的示例中,年龄在 25 到 35 岁之间且“Score”大于 80 的个体将从 T 表格中过滤出来,从而为分析提供一个集中的数据子集。 示例 输出  说明 创建示例表格 T - 我们创建一个包含“Name”、“Age”和“Height”列的表格 T。
- 每一行代表一个人,包含他们的年龄和身高。
显示原始表格 T 按年龄和身高过滤表格 - 我们过滤表格 T 以包含满足以下条件的个体:
- “Age” 在 25 和 35 之间,并且
- “Height” 大于 160。
- 结果存储在变量 filtered_complex 中。
显示过滤后的表格 - 我们显示过滤后的表格 filtered_complex 以查看满足这些条件的个体。
分组和聚合数据分组和聚合数据允许您基于数据集中的特定类别或组来汇总信息。这对于从大型数据集中生成见解或执行统计分析特别有用。 数据分组分组根据一个或多个列中的值将表格划分为更小的子集。MATLAB 的 findgroups 函数通常用于创建组索引,然后可以使用这些组索引进行各种操作。 创建组索引创建组索引提供了一种识别和分离数据集中不同类别的方法。然后使用这些组索引进行后续的聚合操作。 示例 输出  说明 根据“Category”创建组索引 - 它使用 findgroups 函数根据 'Category' 列中的值创建组索引。
- 结果存储在变量 group_indices 中。
显示组索引 - 最后,脚本显示组索引 group_indices 以显示基于表格 'Category' 列的行分组。
数据聚合数据聚合涉及将函数应用于创建的组,例如计算总和、平均值、计数或其他统计度量。MATLAB 的 splitapply 和 groupsummary 函数是宝贵的聚合工具。 使用 splitapplysplitapply 函数将指定的函数(在此例中为 @mean)应用于由 group_indices 定义的每个数据组。这导致计算数据集中每个不同“Category”的平均“Score”。 输出  说明 创建示例表格 T - 脚本创建一个包含“Name”、“Category”和“Score”列的表格 T。
- 每一行代表一个人,包含他们的姓名、类别和分数。
根据“Category”创建组索引 - 它使用 findgroups 函数根据 'Category' 列中的值创建组索引。
- 这些组索引识别“Category”列中的不同类别。
使用 splitapply 计算每个类别的平均分数 - splitapply 函数将 @mean 函数(计算平均值)应用于表格 T 的 'Score' 列。
- 它根据之前为每个类别创建的 group_indices 对分数进行分组。
- 结果是一个数组 avg_scores,其中包含每个类别的平均分数。
显示平均分数 - 脚本显示每个类别的平均分数,显示表格 T 的每个唯一类别在“Category”列中的平均分数。
连接表格:合并和串联连接表格涉及基于公共变量或键组合来自多个表格的信息。MATLAB 提供了合并、连接或串联表格的函数,使您能够从不同来源创建全面的数据集。 Inner Join内连接根据公共键组合两个表格中的行,仅保留在两个表格中具有匹配值的行。 示例 输出 
 说明 创建示例表格 T1 和 T2 - 创建了两个包含“ID”、“Name”和“Score”列的示例表格 T1 和 T2。
- 这些表格代表一些包含 ID、姓名和分数的假设数据。
内连接操作 - innerjoin 函数根据匹配的“ID”值组合 T1 和 T2 中的数据。
- 它创建了一个新表格 inner_join_table,其中包含“ID”值同时存在于 T1 和 T2 中的行。
显示结果 - 脚本显示结果的内连接表格 inner_join_table,它显示了 T1 和 T2 中针对共同“ID”值的组合数据。
Outer Join外连接合并两个表格中的行,保留两个表格中的所有行,并在没有匹配项的地方用 NaNs(对于数值列)或空字符串(对于字符列)填充缺失值。 示例 输出  说明 创建示例表格 T1 和 T2 - 创建了两个包含“ID”、“Name”和“Score”列的示例表格 T1 和 T2。
- 这些表格代表包含 ID、姓名和分数的假设数据。
显示原始表格 T1 和 T2 - 脚本显示原始表格 T1 和 T2 以显示外连接操作之前的数据。
外连接操作 - outerjoin 函数根据匹配的“ID”值组合 T1 和 T2 中的数据。
- 它创建了一个新表格 outer_join_table,其中包含“ID”值存在于 T1、T2 或两者中的行。
串联表格串联表格允许您垂直合并表格(堆叠行)或水平合并表格(连接列)。 垂直连接垂直连接将 T1 的行堆叠在 T2 的上方,创建一个包含来自两个源的组合数据的大表格。 示例 输出 
 说明 创建示例表格 T1 和 T2 - 创建了两个包含“ID”、“Name”和“Score”列的示例表格 T1 和 T2。
- 这些表格代表包含 ID、姓名和分数的假设数据。
重命名 T2 中的变量 - 我们使用 T2.Properties.VariableNames 将 T2 中的变量重命名为与 T1 中的变量匹配。
- 这确保两个表格具有相同的变量名以进行垂直连接。
显示原始表格 T1 和 T2 - 脚本显示原始表格 T1 和 T2 以显示垂直连接之前的数据。
垂直连接 - 现在,由于两个表格具有相同的变量名,垂直连接 [T1; T2] 可以正常工作。
- 它将 T1 的行堆叠在 T2 的上方。
水平连接水平连接将 T1 和 T2 的列并排组合,创建一个更宽的表格,其中包含其他变量或属性。 示例 输出  说明 水平连接 - 由于两个表格具有唯一的变量名,水平连接 [T1, T2] 现在可以正常工作。
- 它将 T1 的列与 T2 的列并排组合。
处理缺失数据处理缺失数据是数据分析中的常见挑战。MATLAB 提供了处理缺失值的函数,例如检测、删除或填充缺失的数据点。 检测缺失数据missing 函数识别 T 表格中缺失值的位置,并在生成的逻辑数组中将它们标记为 true。 示例 输出  说明 - 我们创建一个包含“ID”、“Name”和“Score”列的示例表格 T,并故意包含缺失值(NaN)。
- ismissing(T) 函数检测这些缺失值并创建一个逻辑矩阵,其中 1 表示缺失值,0 表示非缺失值。
- 生成的 missing_values 矩阵有助于识别和处理表格中的缺失数据。
删除包含缺失数据的行rmmissing 函数从 T 表格中删除任何包含缺失值的整行,从而提供一个干净的、包含完整观测值的数据集。 示例 输出  说明 - 我们创建一个包含“ID”、“Name”和“Score”列的示例表格 T,并故意包含缺失值(NaN)。
- rmmissing(T) 函数从 T 中删除任何包含缺失值的行,并创建一个新表格 T_cleaned。
- 生成的 T_cleaned 表格仅包含没有缺失值的行,从而有效地清理了数据。
处理重复数据重复数据可能会扭曲分析结果并导致不准确。MATLAB 提供了从表格中识别和删除重复行的函数。 识别重复行duplicated rows 函数标记 T 表格中与其他行完全重复的行,从而深入了解潜在的数据冗余。 示例 输出  说明 创建包含潜在重复行的示例表格 T - 我们创建了一个包含“ID”、“Name”和“Score”列的示例表格 T。
- 故意复制一些行以演示识别重复行。
显示原始表格 T 识别重复行 - 我们首先使用 findgroups 函数根据表格 T 的行创建组索引。
- 接下来,我们使用 splitapply 来计算每个组的计数,这对应于每个 ID 的出现次数。
- 出现次数超过一次的 ID 值的行被视为重复项。
显示重复行的索引 - 脚本通过查找 ID 计数大于 1 的索引来显示重复行的索引。
删除重复行unique 函数从 T 表格中删除重复行,仅保留每个唯一行的第一次出现。这确保了一个没有重复条目的干净数据集。 示例 输出  说明 创建包含潜在重复行的示例表格 T - 我们创建了一个包含“ID”、“Name”和“Score”列的示例表格 T。
- 故意复制一些行以演示删除重复行。
显示原始表格 T 删除重复行 - unique(T) 函数从表格 T 中删除重复行,保留每个唯一行的第一次出现。
- 此函数返回一个新表格 T_unique,其中仅包含唯一行。
总结掌握 MATLAB 中高级表格操作技术将为数据分析和探索打开一扇充满可能性的世界。排序、过滤、分组、聚合、连接以及处理缺失或重复数据是提取数据集中有价值见解的关键技能。 - 借助 MATLAB 提供的各种函数和操作,您可以使用这些工具有效地操作、转换和分析任何大小和复杂度的表格。
- 无论您是处理实验结果、调查数据还是财务记录,MATLAB 的表格功能都使您能够获得更深入的见解并做出明智的决策。
将这些高级主题纳入您的 MATLAB 工作流程,以简化您的数据分析流程,发现有意义的模式,并释放您数据的全部潜力。
|