Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

访问表中的数据

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

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

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

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

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

表索引语法一览

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

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

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

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

您可以通过名称、数值索引或数据类型指定行和变量。从 R2019b 开始,变量名称和行名称可以包含任何字符,包括空格和非 ASCII 字符。此外,它们可以由任何字符(而不仅仅是字母)开头。变量名称和行名称不必是有效的 MATLAB® 标识符(由 isvarname 函数判别)。

输出的类型

语法

变量

示例

表,包含指定的行和变量

T(rows,vars)

指定为:

  • 行号(在 1m 之间)

  • 名称,如果 T 有行名称

  • 时间,如果 T 是时间表

  • 冒号 (:),表示所有行

指定为:

  • 变量编号(在 1n 之间)

  • 名称

  • 冒号 (:),表示所有变量

  • T(1:5,[1 4 5])

    表,包含 T 中第一个、第四个和第五个变量的前五行

  • T(:,{'A','B'})

    表,包含 T 中名为 'A''B' 的变量的所有行

表,包含具有指定数据类型的变量

S = vartype(type);

T(rows,S)

指定为:

  • 行号(在 1m 之间)

  • 名称,如果 T 有行名称

  • 时间,如果 T 是时间表

  • 冒号 (:),表示所有行

指定为数据类型,如 'numeric''categorical''datetime'

  • S = vartype('numeric');

    T(1:5,S)

    表,包含 T 的前五行中的数值变量

数组,包含从一个变量中提取的数据

T.var

T.(expression)

未指定

指定为:

  • 变量名称(不带引号)

  • 圆括号内的表达式,返回变量名称或变量编号

  • T.Date

    从名为 'Date' 的表变量中提取的数组

  • T.('2019/06/30')

    从名为 '2019/06/30' 的表变量中提取的数组

  • T.(1)

    从第一个表变量中提取的数组

数组,包含从一个变量的指定行中提取的数据

T.var(rows)

T.(expression)(rows)

指定为数组的数值索引或逻辑索引

指定为:

  • 变量名称(不带引号)

  • 圆括号内的表达式,返回变量名称或变量编号

  • T.Date(1:5)

    从名为 'Date' 的表变量中所提取数组的前五行

  • T.('2019/06/30')(1:5)

    从名为 '2019/06/30' 的表变量中所提取数组的前五行

  • T.(1)(1:5)

    从第一个表变量中提取所数组的前五行

数组,串联来自指定的行和变量的数据

T{rows,vars}

指定为:

  • 行号(在 1m 之间)

  • 名称,如果 T 有行名称

  • 时间,如果 T 是时间表

  • 冒号 (:),表示所有行

指定为:

  • 变量编号(在 1n 之间)

  • 名称

  • 冒号 (:),表示所有变量

  • T{1:5,[1 4 5]}

    T 中第一个、第四个和第五个变量的前五行串联而成的数组

  • T{:,{'A','B'}}

    T 中名为 'A''B' 的变量的所有行串联而成的数组

数组,串联指定行和变量中具有指定数据类型的数据

S = vartype(type);

T{rows,S}

指定为:

  • 行号(在 1m 之间)

  • 名称,如果 T 有行名称

  • 时间,如果 T 是时间表

  • 冒号 (:),表示所有行

指定为数据类型,如 'numeric''categorical''datetime'

  • S = vartype('numeric');

    T{1:5,S}

    T 的前五行中的数值变量串联而成的数组

数组,串联变量的所有行的数据

T.Variables

未指定

未指定

  • T.Variables

    T{:,:} 返回的数组相同

包含指定的行和变量的表

将 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               

创建一个表并使用 AgeGenderHeightWeightSmoker 工作区变量填充它。将 LastName 中的唯一标识符用作行名称。T 是一个 100×5 表。(当您指定行名称时,它们不被视为表变量。)

T = table(Age,Gender,Height,Weight,Smoker,...
    'RowNames',LastName)
T=100×5 table
                Age      Gender      Height    Weight    Smoker
                ___    __________    ______    ______    ______

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

使用数值索引建立索引

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

T1 = T(1:5,:)
T1=5×5 table
                Age      Gender      Height    Weight    Smoker
                ___    __________    ______    ______    ______

    Smith       38     {'Male'  }      71       176      true  
    Johnson     43     {'Male'  }      69       163      false 
    Williams    38     {'Female'}      64       131      false 
    Jones       40     {'Female'}      67       133      false 
    Brown       49     {'Female'}      64       119      false 

T1 是一个 5×5 的表。

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

使用名称建立索引

选择姓氏为 'Williams''Brown' 的患者的所有数据。由于 T 中的行名称是患者的姓氏,请使用行名称对 T 进行索引。

T2 = T({'Williams','Brown'},:)
T2=2×5 table
                Age      Gender      Height    Weight    Smoker
                ___    __________    ______    ______    ______

    Williams    38     {'Female'}      64       131      false 
    Brown       49     {'Female'}      64       119      false 

T2 是一个 2×5 的表。

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

T3 = T(1:5,{'Height','Weight'})
T3=5×2 table
                Height    Weight
                ______    ______

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

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

T 添加一个带空格和短横线的变量名称。然后使用变量名称对 T 进行索引。

T = addvars(T,SelfAssessedHealthStatus,'NewVariableNames','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'     }       

指定数据类型下标

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

首先,创建一个数据类型下标来匹配数值表变量。

S = vartype('numeric')
S = 
	table vartype subscript:

		Select table variables matching the type 'numeric'

	See Access Data in a Table.

创建一个表,其中只包含 T 的前五行中的数值变量。

T4 = T(1:5,S)
T4=5×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  

使用圆点表示法和逻辑值提取数据

根据 patients MAT 文件创建一个表。然后使用圆点表示法从表变量中提取数据。您还可以基于满足条件的表变量值生成逻辑索引,用它们进行索引。

load patients

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

从变量中提取数据

要从一个变量中提取数据,请使用圆点表示法。从变量 Weight 中提取数值。然后使用这些值绘制一个直方图。

histogram(T.Weight)
title('Patient Weight')

T.Weight 是一个包含 100 行的双精度列向量。

使用逻辑索引选择行

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

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

rows = T.Age < 40
rows = 100x1 logical array

   1
   0
   1
   0
   0
   0
   1
   0
   1
   1
      ⋮

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

T.Height(rows)
ans = 56×1

    71
    64
    64
    68
    66
    71
    72
    65
    69
    69
      ⋮

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

T(rows,:)
ans=56×5 table
                 Age      Gender      Height    Weight    Smoker
                 ___    __________    ______    ______    ______

    Smith        38     {'Male'  }      71       176      true  
    Williams     38     {'Female'}      64       131      false 
    Miller       33     {'Female'}      64       142      true  
    Moore        28     {'Male'  }      68       183      false 
    Taylor       31     {'Female'}      66       132      false 
    Jackson      25     {'Male'  }      71       174      false 
    White        39     {'Male'  }      72       202      true  
    Harris       36     {'Female'}      65       129      false 
    Thompson     32     {'Male'  }      69       191      true  
    Garcia       27     {'Female'}      69       131      true  
    Martinez     37     {'Male'  }      70       179      false 
    Rodriguez    39     {'Female'}      64       117      false 
    Walker       28     {'Female'}      65       123      true  
    Hall         25     {'Male'  }      70       189      false 
    Allen        39     {'Female'}      63       143      false 
    Young        25     {'Female'}      63       114      false 
      ⋮

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

rows = (T.Smoker==true & T.Age<40);
T(rows,:)
ans=18×5 table
                 Age      Gender      Height    Weight    Smoker
                 ___    __________    ______    ______    ______

    Smith        38     {'Male'  }      71       176      true  
    Miller       33     {'Female'}      64       142      true  
    White        39     {'Male'  }      72       202      true  
    Thompson     32     {'Male'  }      69       191      true  
    Garcia       27     {'Female'}      69       131      true  
    Walker       28     {'Female'}      65       123      true  
    King         30     {'Male'  }      67       186      true  
    Nelson       33     {'Male'  }      66       180      true  
    Mitchell     39     {'Male'  }      71       164      true  
    Turner       37     {'Male'  }      70       194      true  
    Sanders      33     {'Female'}      67       115      true  
    Price        31     {'Male'  }      72       178      true  
    Jenkins      28     {'Male'  }      69       189      true  
    Long         39     {'Male'  }      68       182      true  
    Patterson    37     {'Female'}      65       120      true  
    Flores       31     {'Female'}      66       141      true  
      ⋮

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

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

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

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

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

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

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

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

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

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

load patients

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

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

T.(1)
ans = 100×1

    38
    43
    38
    40
    49
    46
    33
    40
    28
    31
      ⋮

要按名称指定变量,可以用引号将其括起来。由于 'Age' 是有效标识符,您可以使用 T.AgeT.('Age') 指定它。

T.('Age')
ans = 100×1

    38
    43
    38
    40
    49
    46
    33
    40
    28
    31
      ⋮

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

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

T = addvars(T,SelfAssessedHealthStatus,'NewVariableNames','Self-Assessed Health Status');
T(1:5,:)
ans=5×6 table
                Age      Gender      Height    Weight    Smoker    Self-Assessed Health Status
                ___    __________    ______    ______    ______    ___________________________

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

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

C = T.('Self-Assessed Health Status');
C(1:5)
ans = 5x1 cell
    {'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×6 table
                Age      Gender      Height    Weight    Smoker    31-Jan-2020 Self Report
                ___    __________    ______    ______    ______    _______________________

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

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

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

指定行和变量

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

load patients

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

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

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

A = T{1:5,{'Height','Weight'}}
A = 5×2

    71   176
    69   163
    64   131
    67   133
    64   119

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

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

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

如果所有表变量的数据类型都支持它们彼此串联,则可以使用 T.Variables 语法将所有表数据放入一个数组中。此语法等效于 T{:,:},其中冒号表示所有行和所有变量。

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
      ⋮

另请参阅

| | |

相关主题