Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

table

具有命名变量的表数组(变量可包含不同类型的数据)

说明

table 数组存储列向数据或表格数据,例如文本文件或电子表格中的列。表将每一段列向数据存储在一个变量中。表变量可以具有不同的数据类型和大小,只要所有变量具有相同的行数即可。表变量有名称,就像结构体的字段有名称一样。可以使用 summary 函数获取有关表的信息。

如果您的表格数据包含时间戳,请考虑使用timetable来存储和分析您的数据。

要对表进行索引,可以使用圆括号 () 返回子表,或者使用花括号 {} 提取内容。您可以使用名称访问变量和行。有关使用数值和名称进行索引的详细信息,请参阅访问表中的数据

创建对象

您可以使用 Import Toolreadtable 函数将文件中的数据读取到表中。也可以按如下所述,使用 table 函数根据现有的电子表格变量来创建一个表。

您也可以创建一个为变量预分配空间的表,以后再填充这些变量的值。要创建一个为变量预分配空间的表,请使用 table 函数并将 'Size' 作为第一个输入参数,如下所述。

描述

示例

T = table(var1,...,varN) 根据输入变量 var1,...,varN 创建表。变量的大小和数据类型可以不同,但所有变量的行数必须相同。

如果输入是工作区变量,则 table 将输入名称指定为输出表中的变量名称。否则,table 将指定 'Var1',...,'VarN' 形式的变量名称,其中 N 是变量的数量。

示例

T = table('Size',sz,'VariableTypes',varTypes) 创建一个表并为具有您指定的数据类型的变量预分配空间。sz 是二元素数值数组,其中 sz(1) 指定行数,sz(2) 指定变量数。varTypes 指定变量的数据类型。

示例

T = table(___,Name,Value) 使用一个或多个名称-值对组参数指定其他输入参数。例如,您可以使用 'VariableNames' 名称-值对组指定变量名称。您可将此语法与上述语法中的任何输入参数一起使用。

示例

T = table 创建一个空的 0×0 表。

输入参数

全部展开

输入变量,指定为具有相同行数的数组。输入变量可以具有不同的大小和数据类型。

常见的输入变量为数值数组、逻辑数组、字符数组、结构体数组或元胞数组。输入变量也可以是数组对象。此类数组必须支持 var(index1,...,indexN) 形式的索引,其中 index1 为与变量 var 的行对应的数值或逻辑向量。此外,该数组还必须使用 dim 参数实现 vertcat 方法和 size 方法。

示例: table([1:4]',ones(4,3,2),eye(4,2)) 根据含有 4 行但大小不同的变量创建表。

示例: table([1:3]',{'one';'two';'three'},categorical({'A';'B';'C'})) 根据含有 3 行但数据类型不同的变量创建表。

预分配的表的大小,指定为二元素数值向量。sz 的第一个元素指定行数,第二个元素指定表变量的数量。

要仅创建变量而不包含任何行,请将 0 指定为 sz 的第一个元素。

示例: T = table('Size',[50 3],'VariableTypes',{'string','double','datetime'}) 为一个包含字符串数组、双精度数组和日期时间数组的表预分配 50 个行。

示例: T = table('Size',[0 4],'VariableTypes',varTypes) 指定零个行和四个变量。

预分配变量的数据类型,指定为字符向量元胞数组或字符串数组。由 varTypes 指定的类型的数量必须等于由 sz 的第二个元素指定的变量的数量。

varTypes 可以包含任何数据类型的名称,包括表中显示的名称。

数据类型名称

每个元素中的初始值

'double', 'single'

双精度或单精度 0

'doublenan', 'doubleNaN', 'singlenan', 'singleNaN'

双精度或单精度 NaN

'int8', 'int16', 'int32', 'int64'

有符号 8 位、16 位、32 位或 64 位整数 0

'uint8', 'uint16', 'uint32', 'uint64'

无符号 8 位、16 位、32 位或 64 位整数 0

'logical'

0 (false)

'categorical'

<undefined> 分类值

'datetime'

NaT datetime

'duration'

0 秒,作为 duration

'calendarDuration'

0 天,作为 calendarDuration

'string'

""(不包含任何字符的 1×1 字符串)

'cellstr'

{''}(具有 0×0 字符数组的元胞)

'cell'

{[]}(具有 0×0 双精度数组的元胞)

'struct'

没有字段的标量结构体

'table'

没有变量的表

'timetable'

没有变量的时间表,行时间为 NaT

对于任何其他数据类型,初始值是该类型或类用于“填充”数组的未分配元素的值。

如果将 'char' 指定为数据类型,则 table 会将对应的变量预分配为字符向量元胞数组,而不是字符数组。最佳做法是避免创建字符数组形式的表或时间表变量。处理表或时间表中的文本数据时,请考虑使用字符串数组或分类数组。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: T = table(Age,Height,Weight,'RowNames',LastName) 创建一个包含由变量 LastName 指定的行名称的表。

变量名称,指定为字符向量元胞数组或字符串数组,其元素为非空且不同。

  • 数组中的名称的数量必须等于时间表变量的数量。

  • table 函数还将变量名称存储在表的 VariableNames 属性中。

  • 变量名称可以包含任何 Unicode® 字符,包括空格和非 ASCII 字符。

示例: T = table(lat,lon,'VariableNames',["Latitude","Longitude"]) 基于输入数组 latlon 创建一个表,并命名对应的表变量 LatitudeLongitude

行名称,指定为字符向量元胞数组或字符串数组,其元素为非空且不同。

  • 数组中的名称的数量必须等于行的数量。

  • table 函数还将行名称存储在表的 RowNames 属性中。

  • 行名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。

  • table 函数从行名称中删除任何前导或尾部空白字符。

示例: T = table(Age,Height,Weight,'RowNames',LastName) 创建一个包含由变量 LastName 指定的行名称的表。

自 R2021a 开始提供

维度名称,指定为二元素字符向量元胞数组或二元素字符串数组,其元素为非空且不同。

  • table 函数还将维度名称存储在表的 DimensionNames 属性中。

  • 维度名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。

在 R2021a 之前,只能通过设置 DimensionNames 属性来指定维度名称。

示例: T = table(Age,Height,Weight,'RowNames',LastName,'DimensionNames',["PatientName","PatientData"]) 创建一个表,其中第一个维度的名称为 "PatientName",第二个维度的名称为 "PatientData"

属性

全部展开

访问表元数据属性

表包含用于描述该表及其变量的元数据属性。使用语法 tableName.Properties.PropertyName 访问这些属性,其中 PropertyName 是属性的名称。例如,可以使用语法 T.Properties.VariableNames 访问表 T 中变量的名称。

您可以使用 tableName.Properties 语法返回所有元数据属性的摘要。

表通过 Properties 属性提供元数据访问,因为您可以使用圆点语法直接访问表数据。例如,如果表 T 有名为 Var1 的变量,则可以使用语法 T.Var1 访问该变量中的值。

表的元数据

维度名称,指定为二元素字符向量元胞数组或二元素字符串数组。

  • 维度名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。

  • 如果使用字符串数组指定此属性,则将其转换并存储为字符向量元胞数组。

您可以使用这两个维度名称来访问表数据。

  • 如果表有行名称,并且您使用圆点语法和第一个维度名称,则可以将行名称作为向量来访问。

  • 如果使用圆点语法和第二个维度名称,则会将所有变量的数据串联在一个数组中,就像已使用 {:,:} 语法对表进行索引一样。

示例

创建表并显示其维度名称。您可以结合使用圆点语法和维度名称来访问行名称和数据。

load patients
T = table(Age,Height,Weight,Systolic,Diastolic, ...
          'RowNames',LastName);
T.Properties.DimensionNames
ans = 1x2 cell
    {'Row'}    {'Variables'}

使用第一个维度名称访问行名称。显示前五个名称。

T.Row(1:5)
ans = 5x1 cell
    {'Smith'   }
    {'Johnson' }
    {'Williams'}
    {'Jones'   }
    {'Brown'   }

使用第二个维度名称访问数据。此语法等效于 T{:,:}

T.Variables
ans = 100×5

    38    71   176   124    93
    43    69   163   109    77
    38    64   131   125    83
    40    67   133   117    75
    49    64   119   122    80
    46    68   142   121    70
    33    64   142   130    88
    40    68   180   115    82
    28    68   183   115    78
    31    66   132   118    86
      ⋮

使用 Properties.DimensionNames 属性修改其维度的名称。更改维度名称后,可以分别使用语法 T.PatientT.Data 访问行名称和数据。

T.Properties.DimensionNames = ["Patient","Data"];
T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Patient'  'Data'}
           VariableNames: {'Age'  'Height'  'Weight'  'Systolic'  'Diastolic'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowNames: {100x1 cell}
        CustomProperties: No custom properties are set.
      Use addprop and rmprop to modify CustomProperties.

行名称,指定为字符向量元胞数组或字符串数组,其元素为非空且不同。如果 RowNames 不为空,则行名称数必须等于表中的行数。

  • 行名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。

  • 如果您分配的行名称包含前导或尾部空白字符,则 MATLAB® 会将它们从行名称中删除。

  • 查看表时,行名称是可见的。此外,您也可以在圆括号或花括号中使用行名称来访问表数据。

  • 访问行名称的另一种方法是使用圆点语法和表的第一个维度的名称。

  • 如果使用字符串数组指定此属性,则将其转换并存储为字符向量元胞数组。

示例

创建一个表。然后添加行名称并按名称访问行。

load patients
T = table(Age,Height,Weight,Smoker,Systolic,Diastolic,SelfAssessedHealthStatus);
T.SelfAssessedHealthStatus = string(SelfAssessedHealthStatus);

使用 Properties.RowNames 属性添加行名称。默认情况下,表没有行名称,但您可以随时添加它们。

T.Properties.RowNames = string(LastName);
head(T,5)
                Age    Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
                ___    ______    ______    ______    ________    _________    ________________________

    Smith       38       71       176      true        124          93              "Excellent"       
    Johnson     43       69       163      false       109          77              "Fair"            
    Williams    38       64       131      false       125          83              "Good"            
    Jones       40       67       133      false       117          75              "Fair"            
    Brown       49       64       119      false       122          80              "Good"            

访问行名称的另一种方法是使用圆点语法和表的第一个维度的名称。显示前五个行名称。

T.Properties.DimensionNames
ans = 1x2 cell
    {'Row'}    {'Variables'}

T.Row(1:5)
ans = 5x1 cell
    {'Smith'   }
    {'Johnson' }
    {'Williams'}
    {'Jones'   }
    {'Brown'   }

按行名称对表进行索引。

T(["Smith","Brown"],:)
ans=2×7 table
             Age    Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
             ___    ______    ______    ______    ________    _________    ________________________

    Smith    38       71       176      true        124          93              "Excellent"       
    Brown    49       64       119      false       122          80              "Good"            

表描述,指定为字符向量或字符串标量。使用 summary 函数时,此描述是可见的。

如果使用字符串标量指定此属性,则将其转换并存储为字符向量。

示例

创建一个表。修改表的描述。显示结果摘要。

load patients
T = table(LastName,Age,Height,Weight);
T.LastName = string(T.LastName);
T.Properties.Description = "Simulated patient data";
summary(T)
Description:  Simulated patient data

Variables:

    LastName: 100x1 string

    Age: 100x1 double

        Values:

            Min          25   
            Median       39   
            Max          50   

    Height: 100x1 double

        Values:

            Min          60   
            Median       67   
            Max          72   

    Weight: 100x1 double

        Values:

            Min          111  
            Median     142.5  
            Max          202  

其他表信息,指定为数组。您可以使用此属性向表添加任何类型的数据。

示例

创建一个表。将匿名函数作为与表相关联的一段用户数据附加。

load patients
T = table(LastName,Age,Height,Weight,Smoker,Systolic,Diastolic);
formula = @(x) x.^2;
T.Properties.UserData = formula;
T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: @(x)x.^2
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'LastName'  'Age'  'Height'  'Weight'  'Smoker'  'Systolic'  'Diastolic'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowNames: {}
        CustomProperties: No custom properties are set.
      Use addprop and rmprop to modify CustomProperties.

变量元数据

变量名称,指定为字符向量元胞数组或字符串数组,其元素为非空且不同。名称的数量必须等于变量数 。

  • 变量名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。

  • 查看表和使用 summary 函数时,变量名称是可见的。此外,您也可以在圆括号、花括号中使用变量名称,或者将变量名称与点索引配合使用来访问表数据。

  • 如果使用字符串数组指定此属性,则将其转换并存储为字符向量元胞数组。

示例

创建一个使用默认变量名称的表。然后使用 Properties.VariableNames 属性修改这些名称。

T = table(["Smith";"Nguyen";"Williams";"Fernandez";"Brown"],[38;43;38;40;49], ...
          [71;69;64;67;64],[176;163;131;133;119])
T=5×4 table
       Var1        Var2    Var3    Var4
    ___________    ____    ____    ____

    "Smith"         38      71     176 
    "Nguyen"        43      69     163 
    "Williams"      38      64     131 
    "Fernandez"     40      67     133 
    "Brown"         49      64     119 

T.Properties.VariableNames = ["LastName","Age","Height","Weight"]
T=5×4 table
     LastName      Age    Height    Weight
    ___________    ___    ______    ______

    "Smith"        38       71       176  
    "Nguyen"       43       69       163  
    "Williams"     38       64       131  
    "Fernandez"    40       67       133  
    "Brown"        49       64       119  

显示和修改变量的基本方法是使用圆点语法按名称访问它们。

T.Age
ans = 5×1

    38
    43
    38
    40
    49

T.Age(1) = 53
T=5×4 table
     LastName      Age    Height    Weight
    ___________    ___    ______    ______

    "Smith"        53       71       176  
    "Nguyen"       43       69       163  
    "Williams"     38       64       131  
    "Fernandez"    40       67       133  
    "Brown"        49       64       119  

变量描述,指定为字符向量元胞数组或字符串数组。此属性可以是空元胞数组,这是默认值。如果数组不为空,则它必须包含与变量相同数量的元素。您可以为没有描述的变量指定单独的空字符向量或空字符串。

  • 使用 summary 函数时,变量描述是可见的。

  • 如果使用字符串数组指定此属性,则将其转换并存储为字符向量元胞数组。

示例

创建一个表。修改变量描述。显示结果摘要。

load patients
T = table(LastName,Age,Height,Weight,Smoker,Systolic,Diastolic);
T.LastName = string(T.LastName);
T.Properties.VariableDescriptions = ["","","","", ...
                                     "Has the patient ever been a smoker", ...
                                     "Systolic Pressure","Diastolic Pressure"];
summary(T)
Variables:

    LastName: 100x1 string

    Age: 100x1 double

        Values:

            Min          25   
            Median       39   
            Max          50   

    Height: 100x1 double

        Values:

            Min          60   
            Median       67   
            Max          72   

    Weight: 100x1 double

        Values:

            Min          111  
            Median     142.5  
            Max          202  

    Smoker: 100x1 logical

        Properties:
            Description:  Has the patient ever been a smoker
        Values:

            True        34   
            False       66   

    Systolic: 100x1 double

        Properties:
            Description:  Systolic Pressure
        Values:

            Min         109   
            Median      122   
            Max         138   

    Diastolic: 100x1 double

        Properties:
            Description:  Diastolic Pressure
        Values:

            Min           68  
            Median      81.5  
            Max           99  

变量单位,指定为字符向量元胞数组或字符串数组。此属性可以为空元胞数组(默认值)。如果数组不为空,则它必须包含与变量相同数量的元素。您可以为没有单位的变量指定单独的空字符向量或空字符串。

  • 使用 summary 函数时,变量单位是可见的。

  • 如果使用字符串数组指定此属性,则将其转换并存储为字符向量元胞数组。

示例

创建一个表。修改变量单位。显示结果摘要。

load patients
T = table(LastName,Age,Height,Weight,Smoker,Systolic,Diastolic);
T.LastName = string(T.LastName);
T.Properties.VariableUnits = ["","Yrs","In","Lbs","","mm Hg","mm Hg"];
summary(T)
Variables:

    LastName: 100x1 string

    Age: 100x1 double

        Properties:
            Units:  Yrs
        Values:

            Min          25   
            Median       39   
            Max          50   

    Height: 100x1 double

        Properties:
            Units:  In
        Values:

            Min          60   
            Median       67   
            Max          72   

    Weight: 100x1 double

        Properties:
            Units:  Lbs
        Values:

            Min          111  
            Median     142.5  
            Max          202  

    Smoker: 100x1 logical

        Values:

            True        34   
            False       66   

    Systolic: 100x1 double

        Properties:
            Units:  mm Hg
        Values:

            Min         109   
            Median      122   
            Max         138   

    Diastolic: 100x1 double

        Properties:
            Units:  mm Hg
        Values:

            Min           68  
            Median      81.5  
            Max           99  

状态为连续或离散变量,指定为字符向量元胞数组或字符串数组。

虽然表和时间表都有此属性,但只有时间表使用此属性。有关详细信息,请参阅 timetableVariableContinuity 属性。

自定义元数据

表的自定义元数据及其变量,指定为 CustomProperties 对象。

CustomProperties 对象是可以添加到表中的自定义元数据的容器。默认情况下,CustomProperties 的属性为零。添加到 CustomProperties 的每个属性都可以包含表元数据或变量元数据。如果属性包含变量元数据,则其值必须是数组,并且数组中的元素数必须等于表变量的数量。

  • 要将自定义元数据的属性添加到表中,请使用 addprop 函数。

  • 要访问或修改自定义元数据,请使用语法 tableName.Properties.CustomProperties.PropertyName。在此语法中,PropertyName 是使用 addprop 添加该属性时选择的名称。

  • 要删除属性,请使用 rmprop 函数。

注意:只能使用 addproprmprop 为自定义元数据添加或删除属性。您不能添加或删除 tableName.Properties 对象的属性。

示例

创建一个表。

load patients
T = table(LastName,Age,Height,Weight,Smoker,Systolic,Diastolic);

添加可以保存有关表及其变量的自定义元数据的属性。在此示例中,元数据是仪器的名称,truefalse 值指示是否绘制变量,以及输出文件的名称。要添加属性,请使用 addprop 函数。

T = addprop(T,["Instrument","ToPlot","OutputFile"],["variable","variable","table"]);
T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'LastName'  'Age'  'Height'  'Weight'  'Smoker'  'Systolic'  'Diastolic'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowNames: {}

   Custom Properties (access using t.Properties.CustomProperties.<name>):
              OutputFile: []
              Instrument: []
                  ToPlot: []

使用圆点语法将值赋给自定义元数据。将由文本值构成的数组赋给自定义元数据时,最佳做法是使用字符串数组,而不是字符向量元胞数组。如果 CustomProperties 的属性是字符向量元胞数组,则无法防止您以后将非文本值指定为元胞数组的元素。

T.Properties.CustomProperties.Instrument = ["","","height rod","scale","","blood pressure cuff","blood pressure cuff"];
T.Properties.CustomProperties.ToPlot = [false false true true false true true];
T.Properties.CustomProperties.OutputFile = 'patientData.csv';
T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'LastName'  'Age'  'Height'  'Weight'  'Smoker'  'Systolic'  'Diastolic'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowNames: {}

   Custom Properties (access using t.Properties.CustomProperties.<name>):
              OutputFile: 'patientData.csv'
              Instrument: [""    ""    "height rod"    "scale"    ""    "blood pressure cuff"    "blood pressure cuff"]
                  ToPlot: [0 0 1 1 0 1 1]

T 中删除 OutputFile 属性。

T = rmprop(T,"OutputFile");
T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'LastName'  'Age'  'Height'  'Weight'  'Smoker'  'Systolic'  'Diastolic'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowNames: {}

   Custom Properties (access using t.Properties.CustomProperties.<name>):
              Instrument: [""    ""    "height rod"    "scale"    ""    "blood pressure cuff"    "blood pressure cuff"]
                  ToPlot: [0 0 1 1 0 1 1]

示例

全部折叠

在表中存储关于一组患者的数据。您可以执行计算并将结果存储在同一个表中。您可以为表添加注释以对您的工作和表变量进行描述。

首先,创建包含患者数据的工作区变量。这些变量可以具有任何数据类型,但必须具有相同的行数。

LastName = {'Sanchez';'Johnson';'Li';'Diaz';'Brown'};
Age = [38;43;38;40;49];
Smoker = logical([1;0;1;0;1]);
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

创建一个表 T,作为工作区变量的容器。table 函数使用工作区变量名称作为 T 中表变量的名称。一个表变量可以有多个列。例如,T 中的 BloodPressure 变量是一个 5×2 数组。

T = table(LastName,Age,Smoker,Height,Weight,BloodPressure)
T=5×6 table
     LastName      Age    Smoker    Height    Weight    BloodPressure
    ___________    ___    ______    ______    ______    _____________

    {'Sanchez'}    38     true        71       176       124     93  
    {'Johnson'}    43     false       69       163       109     77  
    {'Li'     }    38     true        64       131       125     83  
    {'Diaz'   }    40     false       67       133       117     75  
    {'Brown'  }    49     true        64       119       122     80  

您可以使用点索引来访问表变量。例如,使用 T.Height 中的值计算患者的平均身高。

meanHeight = mean(T.Height)
meanHeight = 67

计算体重指数 (BMI),并将其添加为新的表变量。您还可以使用圆点语法在一个步骤中添加和命名表变量。

T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2
T=5×7 table
     LastName      Age    Smoker    Height    Weight    BloodPressure     BMI  
    ___________    ___    ______    ______    ______    _____________    ______

    {'Sanchez'}    38     true        71       176       124     93      24.547
    {'Johnson'}    43     false       69       163       109     77      24.071
    {'Li'     }    38     true        64       131       125     83      22.486
    {'Diaz'   }    40     false       67       133       117     75      20.831
    {'Brown'  }    49     true        64       119       122     80      20.426

使用 BMI 计算的描述对表进行注释。您可以使用通过 T.Properties 访问的元数据来对 T 及其变量进行注释。

T.Properties.Description = 'Patient data, including body mass index (BMI) calculated using Height and Weight';
T.Properties
ans = 
  TableProperties with properties:

             Description: 'Patient data, including body mass index (BMI) calculated using Height and Weight'
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'LastName'  'Age'  'Smoker'  'Height'  'Weight'  'BloodPressure'  'BMI'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowNames: {}
        CustomProperties: No custom properties are set.
      Use addprop and rmprop to modify CustomProperties.

使用表的第二个维度的名称,以矩阵形式访问表中的所有数据。

创建一个关于一组患者、包含五行数据的表。

Age = [38;43;38;40;49];
Smoker = logical([1;0;1;0;1]);
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

T = table(Age,Smoker,Height,Weight,BloodPressure)
T=5×5 table
    Age    Smoker    Height    Weight    BloodPressure
    ___    ______    ______    ______    _____________

    38     true        71       176       124     93  
    43     false       69       163       109     77  
    38     true        64       131       125     83  
    40     false       67       133       117     75  
    49     true        64       119       122     80  

使用 DimensionNames 属性显示表的维度名称。第二个维度的默认名称是 Variables

T.Properties.DimensionNames
ans = 1x2 cell
    {'Row'}    {'Variables'}

使用语法 T.Variables 以矩阵形式访问表数据。此语法等同于使用花括号语法 T{:,:} 访问所有内容。如果表数据不能串联为一个矩阵,则会产生错误消息。

T.Variables
ans = 5×6

    38     1    71   176   124    93
    43     0    69   163   109    77
    38     1    64   131   125    83
    40     0    67   133   117    75
    49     1    64   119   122    80

重命名第二个维度。如果更改名称,则可以使用新名称访问数据。

T.Properties.DimensionNames{2} = 'PatientData';
T.PatientData
ans = 5×6

    38     1    71   176   124    93
    43     0    69   163   109    77
    38     1    64   131   125    83
    40     0    67   133   117    75
    49     1    64   119   122    80

通过指定表的大小和变量的数据类型来预分配一个表。table 函数使用适合于您指定的数据类型的默认值填充变量。它还会为变量提供默认名称,但您也可以自行指定变量名称。预分配可为稍后添加到表中的数据提供空间。

sz = [4 3];
varTypes = {'double','datetime','string'};
T = table('Size',sz,'VariableTypes',varTypes)
T=4×3 table
    Var1    Var2      Var3   
    ____    ____    _________

     0      NaT     <missing>
     0      NaT     <missing>
     0      NaT     <missing>
     0      NaT     <missing>

要为变量指定名称,请使用 'VariableNames' 名称-值对组参数。

varNames = {'Temperature','Time','Station'};
T2 = table('Size',sz,'VariableTypes',varTypes,'VariableNames',varNames)
T2=4×3 table
    Temperature    Time     Station 
    ___________    ____    _________

         0         NaT     <missing>
         0         NaT     <missing>
         0         NaT     <missing>
         0         NaT     <missing>

将数据行添加到 T2 的前两行。当您的代码一次性添加一行数据或几行数据时,可以使用预分配。使用预分配时,您可以填充已为数据预留空间的表变量,而不必在每次添加一行时表都随之增长。

T2(1,:) = {75,datetime('now'),"S1"};
T2(2,:) = {68,datetime('now')+1,"S2"}
T2=4×3 table
    Temperature            Time             Station 
    ___________    ____________________    _________

        75         19-Aug-2023 13:08:37    "S1"     
        68         20-Aug-2023 13:08:37    "S2"     
         0                          NaT    <missing>
         0                          NaT    <missing>

您可以将一行数据值封装在一个元胞数组中。当您从元胞数组中分配一行时,该元胞数组中的元素将分配到表中的行。

从数组创建一个表。要指定表变量名称,请使用 'VariableNames' 名称-值对组参数。例如,当其他输入参数不是工作区变量时,可以使用 'VariableNames' 指定名称。

T = table(categorical({'M';'F';'M'}),[45;32;34],...
          {'NY';'CA';'MA'},logical([1;0;0]),...
          'VariableNames',{'Gender','Age','State','Vote'})
T=3×4 table
    Gender    Age    State     Vote 
    ______    ___    ______    _____

      M       45     {'NY'}    true 
      F       32     {'CA'}    false
      M       34     {'MA'}    false

使用州名称作为行名称创建一个表。当使用 table 函数时,您可以同时指定 'VariableNames''RowNames' 名称-值对组。

T = table(categorical({'M';'F';'M'}),[45;32;34],logical([1;0;0]),...
          'VariableNames',{'Gender','Age','Vote'},...
          'RowNames',{'NY';'CA';'MA'})
T=3×3 table
          Gender    Age    Vote 
          ______    ___    _____

    NY      M       45     true 
    CA      F       32     false
    MA      M       34     false

指定表的行名称。表不必一定有行名称,但如果您指定了行名称,则可以按行名称对表进行索引。您还可以使用表的第一个维度的名称来访问一组行名称。

创建包含患者数据的数组。

LastName = {'Sanchez';'Johnson';'Lee';'Diaz';'Brown'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];

创建包含这些数组的表。指定 LastName 作为该表的行名称的来源。该表只有三个变量。行名称不是表变量,而是表的属性。

T = table(Age,Weight,Height,'RowNames',LastName)
T=5×3 table
               Age    Weight    Height
               ___    ______    ______

    Sanchez    38      176        71  
    Johnson    43      163        69  
    Lee        38      131        64  
    Diaz       40      133        67  
    Brown      49      119        64  

由于行具有行名称,因此可以按名称对 T 的行进行索引。

T('Lee',:)
ans=1×3 table
           Age    Weight    Height
           ___    ______    ______

    Lee    38      131        64  

要指定多个行,请使用元胞数组。

T({'Lee','Brown'},:)
ans=2×3 table
             Age    Weight    Height
             ___    ______    ______

    Lee      38      131        64  
    Brown    49      119        64  

要以元胞数组形式访问 T 的所有行名称,请使用 T.Row 语法。默认情况下,Row 是表的第一个维度的名称。

T.Row
ans = 5x1 cell
    {'Sanchez'}
    {'Johnson'}
    {'Lee'    }
    {'Diaz'   }
    {'Brown'  }

更改第一个维度的名称。如果更改名称,则可以使用新名称访问行名称。

T.Properties.DimensionNames{1} = 'LastNames';
T.LastNames
ans = 5x1 cell
    {'Sanchez'}
    {'Johnson'}
    {'Lee'    }
    {'Diaz'   }
    {'Brown'  }

从 R2017a 开始,您可以使用双引号创建字符串,并将字符串数组添加为表变量。

FlightNum = [1261;547;3489];
Customer = ["Jones";"Brown";"Smith"];
Date = datetime(2016,12,20:22)';
Rating = categorical(["Good";"Poor";"Fair"]);
Comment = ["Flight left on time, not crowded";...
           "Late departure, ran out of dinner options";...
           "Late, but only by half an hour. Otherwise fine."];
T = table(FlightNum,Customer,Date,Rating,Comment)
T=3×5 table
    FlightNum    Customer       Date        Rating                         Comment                     
    _________    ________    ___________    ______    _________________________________________________

      1261       "Jones"     20-Dec-2016     Good     "Flight left on time, not crowded"               
       547       "Brown"     21-Dec-2016     Poor     "Late departure, ran out of dinner options"      
      3489       "Smith"     22-Dec-2016     Fair     "Late, but only by half an hour. Otherwise fine."

要使用字符串数组中的文本作为行名称,请将字符串数组转换为字符向量元胞数组。然后创建包含行名称的表。

Customer = cellstr(Customer);
T = table(FlightNum,Date,Rating,Comment,'RowNames',Customer)
T=3×4 table
             FlightNum       Date        Rating                         Comment                     
             _________    ___________    ______    _________________________________________________

    Jones      1261       20-Dec-2016     Good     "Flight left on time, not crowded"               
    Brown       547       21-Dec-2016     Poor     "Late departure, ran out of dinner options"      
    Smith      3489       22-Dec-2016     Fair     "Late, but only by half an hour. Otherwise fine."

创建工作区变量,其中包含三个地点的不同日期的降雪总量。这些变量都是行向量。

Date = {'12/25/11','1/2/12','1/23/12','2/7/12','2/15/12'};
location1 = [20 5 13 0 17];
location2 = [18 9 21 5 12];
location3 = [26 10 16 3 15];

要用这些变量创建表,一种方法是使用 T = table(Date',location1',location2',location3') 语法调用 table 函数。由于工作区变量是行向量,所以必须经过转置,才能作为列向数据放入表中。因此,输入参数应为表达式,而不是简单的变量。所以,table 将使用默认变量名称 Var1Var2Var3Var4 来创建 T。您可以在创建 T 后为 T.Properties.VariableNames 指定更有意义的名称。但是,更方便的方法可能是先创建一个空表,然后使用新名称逐一添加变量。

创建一个空表。转置工作区变量,然后将它们作为列向量添加到表中。在将每个工作区变量分配到 T 中的过程中,为表变量提供一个有意义的名称。

T = table;
T.Date = Date';
T.Natick = location1';
T.Boston = location2';
T.Worcester = location3'
T=5×4 table
        Date        Natick    Boston    Worcester
    ____________    ______    ______    _________

    {'12/25/11'}      20        18         26    
    {'1/2/12'  }       5         9         10    
    {'1/23/12' }      13        21         16    
    {'2/7/12'  }       0         5          3    
    {'2/15/12' }      17        12         15    

从 R2019b 开始,您可以指定不是有效的 MATLAB® 标识符的表变量名称。这种变量名称可以包括空格、非 ASCII 字符,并且可以有任何字符作为前导字符。当您访问这样的变量名称时,请用引号引起来。

创建一个表,其中存储关于一组患者的数据。从患者年龄和是否为烟民开始。

Age = [38;43;38;40;49];
Smoker = logical([1;0;1;0;1]);
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
T = table(Age,Smoker)
T=5×2 table
    Age    Smoker
    ___    ______

    38     true  
    43     false 
    38     true  
    40     false 
    49     true  

添加变量名称为 '29-May-2019 Blood Pressure Reading' 的血压读数。您可以使用圆点语法添加或访问该变量。由于该变量名称不是有效的 MATLAB 标识符,使用圆点语法时需要加上括号和引号。

T.('29-May-2019 Blood Pressure Reading') = BloodPressure
T=5×3 table
    Age    Smoker    29-May-2019 Blood Pressure Reading
    ___    ______    __________________________________

    38     true                  124     93            
    43     false                 109     77            
    38     true                  125     83            
    40     false                 117     75            
    49     true                  122     80            

在表变量名称是有效的 MATLAB 标识符时,使用圆点语法时不需要加上括号和引号。

T.Height = Height;
T.Weight = Weight
T=5×5 table
    Age    Smoker    29-May-2019 Blood Pressure Reading    Height    Weight
    ___    ______    __________________________________    ______    ______

    38     true                  124     93                  71       176  
    43     false                 109     77                  69       163  
    38     true                  125     83                  64       131  
    40     false                 117     75                  67       133  
    49     true                  122     80                  64       119  

使用变量名称对 T 进行索引。

T(:,{'Age','Smoker','29-May-2019 Blood Pressure Reading'})
ans=5×3 table
    Age    Smoker    29-May-2019 Blood Pressure Reading
    ___    ______    __________________________________

    38     true                  124     93            
    43     false                 109     77            
    38     true                  125     83            
    40     false                 117     75            
    49     true                  122     80            

局限性

  • 对下列输入名称使用单引号:

    • 'DimensionNames' (从 R2021a 开始提供)

    • 'RowNames'

    • 'Size'

    • 'VariableTypes'

    • 'VariableNames'

    为了避免与变量输入混淆,请不要对这些名称使用双引号字符串标量(如 "RowNames")。

提示

  • 有关接受或返回表的函数列表,请参阅

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2013b 中推出

全部展开