Matlab:访问表中的数据
创始人
2024-04-05 20:26:49
0

Matlab:访问表中的数据

  • 表索引语法一览
  • 使用指定行和变量进行表索引
    • 使用数值索引或 end 关键字建立索引
    • 使用名称建立索引
    • 使用模式指定行名称或变量名称
    • 按变量的数据类型进行索引
  • 查找值符合逻辑条件的行
    • 使用圆点表示法从表变量中提取数据
    • 对满足逻辑条件的行进行索引
  • 圆点表示法支持任意变量名称或表达式
  • 从指定的行和变量中提取数据
    • 指定行和变量
    • 从所有行和变量中提取数据

表是以变量形式存储列向数据的容器。表变量可以具有不同的数据类型和大小,只要所有变量具有相同的行数即可。表变量有名称,就像结构体的字段有名称一样。表的行可以有名称,但行名称不是必需的。要访问表数据,请使用行和变量的名称或数值索引对其进行索引。

对表进行索引的常见原因包括:

对行和变量重新排序或删除它们。

添加数组作为新的行或变量。

提取数据数组以用作函数的输入参数。

表索引语法一览

根据您使用的索引类型,您可以访问子表或表中提取的数组。使用以下方式进行索引:

圆括号 () 返回包含指定行和变量的表。

圆点表示法以数组形式返回变量的内容。

花括号 {} 返回由指定行和变量的内容串联而成的数组。

您可以通过名称、数值索引或数据类型指定行和变量。

从 R2019b 开始,变量名称和行名称可以包含任何字符,包括空格和非 ASCII 字符。此外,它们可以由任何字符(而不仅仅是字母)开头。变量名称和行名称可以不是有效的 MATLAB® 标识符(由 isvarname 函数判别)。

从 R2022a 开始,当您按名称指定行和变量时,您可以使用 pattern 对象来指定名称。例如,“Var” + digitsPattern 匹配以 Var 开头并以任意个数字结尾的所有名称。

使用指定行和变量进行表索引

将 100 位患者的样本数据从 patients MAT 文件加载到工作区变量中。

load patients
whos

Name Size Bytes Class Attributes

Age 100x1 800 double
Diastolic 100x1 800 double
Gender 100x1 11412 cell
Height 100x1 800 double
LastName 100x1 11616 cell
Location 100x1 14208 cell
SelfAssessedHealthStatus 100x1 11540 cell
Smoker 100x1 100 logical
Systolic 100x1 800 double
Weight 100x1 800 double
创建一个表并使用 Age、Height、Weight、Smoker 和 SelfAssessedHealthStatus 工作区变量填充它。将 LastName 中的唯一标识符用作行名称。T 是一个 100×5 表,包含 100 个行和 5 个变量。(当您指定行名称向量时,它不被视为表变量)。此外,将 SelfAssessedHealthStatus 转换为 categorical 变量,因为它只包含唯一值 Excellent、Good、Fair 和 Poor。当一个变量有一组固定的值(您可以将其视为列别)时,将该变量视为 categorical 数组会很有用。

SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus);
T = table(Age,Height,Weight,Smoker,SelfAssessedHealthStatus,...'RowNames',LastName)

T=100×5 table
Age Height Weight Smoker SelfAssessedHealthStatus
___ ______ ______ ______ ________________________

Smith       38       71       176      true             Excellent        
Johnson     43       69       163      false            Fair             
Williams    38       64       131      false            Good             
Jones       40       67       133      false            Fair             
Brown       49       64       119      false            Good             
Davis       46       68       142      false            Good             
Miller      33       64       142      true             Good             
Wilson      40       68       180      false            Good             
Moore       28       68       183      false            Excellent        
Taylor      31       66       132      false            Excellent        
Anderson    45       68       128      false            Excellent        
Thomas      42       66       137      false            Poor             
Jackson     25       71       174      false            Poor             
White       39       72       202      true             Excellent        
Harris      36       65       129      false            Good             
Martin      48       71       181      true             Good             ⋮

使用数值索引或 end 关键字建立索引

创建一个包含表 T 中所有变量前五行的子表。要指定所需的行和变量,请使用圆括号内数值索引。这种类型的索引类似于对数值数组进行索引。

firstRows = T(1:5,:)

firstRows=5×5 table
Age Height Weight Smoker SelfAssessedHealthStatus
___ ______ ______ ______ ________________________

Smith       38       71       176      true             Excellent        
Johnson     43       69       163      false            Fair             
Williams    38       64       131      false            Good             
Jones       40       67       133      false            Fair             
Brown       49       64       119      false            Good             

您还可以使用 end 关键字来表示最后一行或最后一个变量。使用 end 关键字对表的最后五行进行索引。

lastRows = T(end-4:end,:)

lastRows=5×5 table
Age Height Weight Smoker SelfAssessedHealthStatus
___ ______ ______ ______ ________________________

Alexander    25       69       171      true                Good          
Russell      44       69       188      true                Good          
Griffin      49       70       186      false               Fair          
Diaz         45       68       172      true                Good          
Hayes        48       66       177      false               Fair          

除了数值索引,您还可以在圆括号中使用行或变量名称。(在本例中,使用行索引和冒号比使用行或变量名称更紧凑。)

使用名称建立索引

选择姓氏为 Griffin、Diaz 和 Hayes 的患者的所有数据。由于 T 中的行名称是患者的姓氏,请使用行名称对 T 进行索引。

rowsByName = T(["Griffin","Diaz","Hayes"],:)

rowsByName=3×5 table
Age Height Weight Smoker SelfAssessedHealthStatus
___ ______ ______ ______ ________________________

Griffin    49       70       186      false               Fair          
Diaz       45       68       172      true                Good          
Hayes      48       66       177      false               Fair          

您也可以按名称选择变量。创建一个表,其中只包含 T 中 Height 和 Weight 变量的前五行。显示该表。

variablesByName = T(1:5,["Height","Weight"])

variablesByName=5×2 table
Height Weight
______ ______

Smith         71       176  
Johnson       69       163  
Williams      64       131  
Jones         67       133  
Brown         64       119  

表变量名称不必是有效的 MATLAB 标识符。它们可以包括空格和非 ASCII 字符,并且可以由任何字符开头。

例如,使用 renamevars 函数重命名 SelfAssessedHealthStatus 变量。添加空格和短横线,使变量名称更易读。然后使用变量名称对 T 进行索引。

T = renamevars(T,"SelfAssessedHealthStatus","Self-Assessed Health Status");
T(1:5,["Age","Smoker","Self-Assessed Health Status"])

ans=5×3 table
Age Smoker Self-Assessed Health Status
___ ______ ___________________________

Smith       38     true               Excellent         
Johnson     43     false              Fair              
Williams    38     false              Good              
Jones       40     false              Fair              
Brown       49     false              Good              

使用模式指定行名称或变量名称

当您指定表行名称或变量名称时,您可以使用定义文本匹配规则的模式。例如,您可以匹配以 “Var” 开头后跟任意数字的变量名称。您可以使用 pattern 对象、字符串和运算符构建模式表达式。

例如,按行名称对 T 进行索引以查找患者姓氏以字母 G 开头的所有行。要匹配 G 后的任何字母,请使用 wildcardPattern 函数。

beginsWithG = "G" + wildcardPattern

beginsWithG = pattern
Matching:

"G" + wildcardPattern
T(beginsWithG,:)

ans=6×5 table
Age Height Weight Smoker Self-Assessed Health Status
___ ______ ______ ______ ___________________________

Garcia      27       69       131      true               Fair              
Green       44       71       193      false              Good              
Gonzalez    35       66       118      false              Fair              
Gray        31       64       130      false              Excellent         
Gonzales    48       71       174      false              Good              
Griffin     49       70       186      false              Fair              

按变量名称对 T 进行索引以查找名称中包含 Status 的任何名称。

containsStatus = wildcardPattern + "Status" + wildcardPattern;
T(1:5,containsStatus)

ans=5×1 table
Self-Assessed Health Status
___________________________

Smith                Excellent         
Johnson              Fair              
Williams             Good              
Jones                Fair              
Brown                Good              

按变量的数据类型进行索引

除使用名称或编号指定变量外,您还可以创建一个数据类型下标来匹配具有相同数据类型的所有变量。

首先,通过使用 vartype 函数创建一个数据类型下标来匹配数值表变量。

subscriptObject = vartype("numeric")

subscriptObject =
table vartype subscript:

	Select table variables matching the type 'numeric'See Access Data in a Table.

创建一个只包含 T 中数值变量的表。Smoker 变量是逻辑变量,Self-Assessed Health Status 是 categorical 变量,因此它们被排除在外。

onlyNumericVariables = T(:,subscriptObject)

onlyNumericVariables=100×3 table
Age Height Weight
___ ______ ______

Smith       38       71       176  
Johnson     43       69       163  
Williams    38       64       131  
Jones       40       67       133  
Brown       49       64       119  
Davis       46       68       142  
Miller      33       64       142  
Wilson      40       68       180  
Moore       28       68       183  
Taylor      31       66       132  
Anderson    45       68       128  
Thomas      42       66       137  
Jackson     25       71       174  
White       39       72       202  
Harris      36       65       129  
Martin      48       71       181  ⋮

查找值符合逻辑条件的行

基于 patients MAT 文件中的数据创建另一个更小的表。

load patients.mat
T = table(Age,Height,Weight,Smoker);

要查找其中的值满足逻辑条件的表行,请使用逻辑索引。首先使用圆点表示法来访问表变量。然后,您可以根据表变量中的值是否满足您指定的条件来创建一个逻辑索引数组。使用逻辑索引对表进行索引。

使用圆点表示法从表变量中提取数据

要从表变量中提取数据,请使用圆点表示法。

例如,绘制表变量 Weight 中数值的直方图。使用圆点表示法,您可以将 T.Weight 视为数值数组。T.Weight 是包含 100 个行的双精度列向量。

histogram(T.Weight)
title("Patient Weights")

在这里插入图片描述

对满足逻辑条件的行进行索引

您可以使用逻辑索引数组对数组或表进行索引。通常,您使用逻辑表达式来确定表变量中的哪些值满足逻辑条件。表达式的结果是一个逻辑索引数组。

例如,创建一个逻辑数组,用于匹配年龄小于 40 的患者。

rows = T.Age < 40

rows = 100x1 logical array

1
0
1
0
0
0
1
0
1
1

要提取年龄小于 40 的患者的身高数据,请使用 rows 对 Height 变量进行索引。有 56 名患者的年龄小于 40。

T.Height(rows)

ans = 56×1

71
64
64
68
66
71
72
65
69
69⋮

您可以用逻辑索引对表进行索引。显示 T 中年龄小于 40 的患者的行。

T(rows,:)

ans=56×4 table
Age Height Weight Smoker
___ ______ ______ ______

38       71       176      true  
38       64       131      false 
33       64       142      true  
28       68       183      false 
31       66       132      false 
25       71       174      false 
39       72       202      true  
36       65       129      false 
32       69       191      true  
27       69       131      true  
37       70       179      false 
39       64       117      false 
28       65       123      true  
25       70       189      false 
39       63       143      false 
25       63       114      false ⋮

您可以用一个逻辑表达式匹配多个条件。显示年龄小于 40 的烟民患者的行。

rows = (T.Smoker==true & T.Age<40);
T(rows,:)

ans=18×4 table
Age Height Weight Smoker
___ ______ ______ ______

38       71       176      true  
33       64       142      true  
39       72       202      true  
32       69       191      true  
27       69       131      true  
28       65       123      true  
30       67       186      true  
33       66       180      true  
39       71       164      true  
37       70       194      true  
33       67       115      true  
31       72       178      true  
28       69       189      true  
39       68       182      true  
37       65       120      true  
31       66       141      true  ⋮

圆点表示法支持任意变量名称或表达式

使用圆点表示法进行索引时,有两种方式可以指定变量。

使用名称,不带引号。例如,T.Date 指定名为 “Date” 的变量。

使用表达式,表达式置于点之后,用圆括号括起。例如,T.(“Start Date”) 指定名为 “Start Date” 的变量。

当表变量名称碰巧也是有效的 MATLAB® 标识符时,使用第一种语法。(有效的标识符以字母开头,仅包括字母、数字和下划线。)

指定下列各项时使用第二种语法:

指示变量在表中位置的编号。

不是有效 MATLAB 标识符的变量名称。

一个函数,其输出是表中变量的名称,或是添加到表中的变量。函数的输出必须为字符向量或字符串标量。

例如,根据 patients MAT 文件创建一个表。然后使用圆点表示法来访问表变量的内容。

load patientsT = table(Age,Height,Weight,Smoker);

要按在表中的位置指定变量,请使用编号。Age 是 T 中的第一个变量,因此使用编号 1 来指定其位置。

T.(1)

ans = 100×1

38
43
38
40
49
46
33
40
28
31⋮

要按名称指定变量,请或者在圆点后指定,或者用引号和圆括号将其括起来。由于 Age 是有效标识符,您可以使用 T.Age 或 T.(“Age”) 指定它。

T.Age

ans = 100×1

38
43
38
40
49
46
33
40
28
31⋮

您指定的表变量名称不必是有效的 MATLAB 标识符。变量名称可以包括空格和非 ASCII 字符,并且可以由任何字符开头。但是,当您使用圆点表示法来访问具有此类名称的表变量时,您必须使用引号和圆括号来指定它。

例如,向 T 添加一个带空格和连字符的变量名称。

SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus);
T = addvars(T,SelfAssessedHealthStatus,'NewVariableNames',"Self-Assessed Health Status");
T(1:5,:)

ans=5×5 table
Age Height Weight Smoker Self-Assessed Health Status
___ ______ ______ ______ ___________________________

38       71       176      true               Excellent         
43       69       163      false              Fair              
38       64       131      false              Good              
40       67       133      false              Fair              
49       64       119      false              Good              

使用圆点表示法访问新的表变量。显示前五个元素。

healthStatus = T.("Self-Assessed Health Status");
healthStatus(1:5)

ans = 5x1 categorical
Excellent
Fair
Good
Fair
Good

您也可以将函数的输出用作变量名称。删除 T.(“Self-Assessed Health Status”) 变量。然后将其替换为名称包含当前日期的变量。

T.("Self-Assessed Health Status") = [];
T.(string(datetime("today")) + " Self Report") = SelfAssessedHealthStatus;
T(1:5,:)

ans=5×5 table
Age Height Weight Smoker 25-Jan-2022 Self Report
___ ______ ______ ______ _______________________

38       71       176      true             Excellent       
43       69       163      false            Fair            
38       64       131      false            Good            
40       67       133      false            Fair            
49       64       119      false            Good            

从指定的行和变量中提取数据

使用花括号进行索引会从表中提取数据,并生成数组,而不是子表。但是,除上述差异外,您可以像使用圆括号进行索引时一样,使用编号、名称和数据类型下标来指定行和变量。要从表中提取值,请使用花括号。如果从多个表变量中提取值,则这些变量的数据类型必须支持它们彼此串联。

指定行和变量

基于 patients 文件中的数值和逻辑数组创建一个表。

load patientsT = table(Age,Height,Weight,Smoker,...'RowNames',LastName);

从 T 的多个变量中提取数据。与圆点表示法不同,使用花括号进行索引可以从多个表变量中提取值,并将它们串联成一个数组。

提取前 5 位患者的身高和体重。使用数值索引选择前五行,使用变量名称选择变量 Height 和 Weight。

A = T{1:5,["Height","Weight"]}

A = 5×2

71   176
69   163
64   131
67   133
64   119

A 是一个 5×2 数值数组,而不是表。

如果您指定一个变量名称,则花括号索引生成的数组与使用圆点表示法得到的数组相同。但是,在使用花括号索引时,必须同时指定行和变量。例如,语法 T.Height 和 T{:,“Height”} 返回相同的数组。

从所有行和变量中提取数据

如果所有表变量的数据类型都支持它们彼此串联,则可以使用 T.Variables 语法将所有表数据放入一个数组中。此语法等效于 T{:,:},其中冒号表示所有行和所有变量。如果该表有行名称,则它们不会包含在 T.Variables 的输出中。行名称不存储在表变量中。行名称是描述表的元数据的一部分。

A2 = T.Variables

A2 = 100×4

38    71   176     1
43    69   163     0
38    64   131     0
40    67   133     0
49    64   119     0
46    68   142     0
33    64   142     1
40    68   180     0
28    68   183     0
31    66   132     0⋮

该博文为原创文章,未经博主同意不得转。
本文章博客地址:https://cplusplus.blog.csdn.net/article/details/127786619

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...