Main Content

向表和时间表中添加自定义属性

此示例说明如何向表和时间表中添加自定义属性、设置和访问属性值以及删除属性。

所有表和时间表都有一些包含有关这些表或其变量的元数据的属性。您可以通过 T.Properties 对象访问这些属性,其中 T 是表或时间表的名称。例如,T.Properties.VariableNames 返回一个元胞数组,其中包含 T 中变量的名称。

通过 T.Properties 访问的属性是 tabletimetable 数据类型定义的一部分。不能添加或删除这些预定义的属性。但是,从 R2018b 开始,您可以通过修改表或时间表的 T.Properties.CustomProperties 对象来添加和删除您自己的自定义属性。

添加属性

将电力中断数据读取到表中。使用包含日期时间的第一个变量 OutageTime 对表进行排序。然后显示前三行。

T = readtable('outages.csv');
T = sortrows(T,'OutageTime');
head(T,3)
       Region             OutageTime          Loss     Customers       RestorationTime            Cause      
    _____________    ____________________    ______    __________    ____________________    ________________

    {'SouthWest'}    01-Feb-2002 12:18:00    458.98    1.8202e+06    07-Feb-2002 16:50:00    {'winter storm'}
    {'MidWest'  }    05-Mar-2002 17:53:00    96.563    2.8666e+05    10-Mar-2002 14:41:00    {'wind'        }
    {'MidWest'  }    16-Mar-2002 06:18:00    186.44    2.1275e+05    18-Mar-2002 23:23:00    {'severe storm'}

显示其属性。这些是所有表都有的通用属性。请注意,还有一个 CustomProperties 对象,但默认情况下它并没有任何属性。

T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'Region'  'OutageTime'  'Loss'  'Customers'  'RestorationTime'  'Cause'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowNames: {}
        CustomProperties: No custom properties are set.
      Use addprop and rmprop to modify CustomProperties.

要添加自定义属性,请使用 addprop 函数。指定属性的名称。对于每个属性,还要指定它是包含整个表的元数据(类似于 Description 属性),还是包含其变量的元数据(类似于 VariableNames 属性)。如果属性包含变量元数据,则其值必须是一个长度等于变量数的向量。

添加一些自定义属性,其中包含输出文件名、文件类型以及表示要绘制哪些变量的指示符。最佳做法是将输入表指定为 addprop 的输出参量,使自定义属性成为同一个表的一部分。使用 'table' 选项指定输出文件名和文件类型为表元数据。使用 'variable' 选项指定绘图指示符为变量元数据。

T = addprop(T,{'OutputFileName','OutputFileType','ToPlot'}, ...
              {'table','table','variable'});
T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'Region'  'OutageTime'  'Loss'  'Customers'  'RestorationTime'  'Cause'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowNames: {}

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

设置和访问自定义属性值

使用 addprop 添加自定义属性时,默认情况下它们的值为空数组。您可以使用圆点语法设置和访问自定义属性的值。

设置输出文件名和类型。这些属性包含表的元数据。然后为 ToPlot 属性指定一个逻辑数组。此属性包含变量的元数据。在以下示例中,对于要包含在图中的每个变量,ToPlot 属性值的元素为 true,对于要排除的每个变量,则为 false

T.Properties.CustomProperties.OutputFileName = 'outageResults';
T.Properties.CustomProperties.OutputFileType = '.mat';
T.Properties.CustomProperties.ToPlot = [false false true true true false];
T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'Region'  'OutageTime'  'Loss'  'Customers'  'RestorationTime'  'Cause'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowNames: {}

   Custom Properties (access using t.Properties.CustomProperties.<name>):
          OutputFileName: 'outageResults'
          OutputFileType: '.mat'
                  ToPlot: [0 0 1 1 1 0]

使用 stackedplot 函数将 T 中的变量绘制为一个堆叠图。要仅绘制 LossCustomersRestorationTime 值,请使用 ToPlot 自定义属性作为第二个输入参量。

stackedplot(T,T.Properties.CustomProperties.ToPlot);

Figure contains an object of type stackedplot.

移动或删除表变量时,预定义属性和自定义属性都会重新排序,以使其值所对应的变量保持不变。在此示例中,ToPlot 自定义属性的值与标记要绘制的变量保持对齐,就像 VariableNames 预定义属性的值保持对齐一样。

删除 Customers 变量并显示属性。

T.Customers = [];
T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'Region'  'OutageTime'  'Loss'  'RestorationTime'  'Cause'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowNames: {}

   Custom Properties (access using t.Properties.CustomProperties.<name>):
          OutputFileName: 'outageResults'
          OutputFileType: '.mat'
                  ToPlot: [0 0 1 1 0]

将表转换为时间表,使用电力中断时间作为行时间。使用 movevars 函数将 Region 移到表的末尾,将 RestorationTime 移到第一个变量之前。请注意,属性已相应地进行了重新排序。RestorationTimeLoss 变量仍带有表示要在绘图中包含它们的指示符。

T = table2timetable(T);
T = movevars(T,'Region','After','Cause');
T = movevars(T,'RestorationTime','Before',1);
T.Properties
ans = 
  TimetableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'OutageTime'  'Variables'}
           VariableNames: {'RestorationTime'  'Loss'  'Cause'  'Region'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowTimes: [1468x1 datetime]
               StartTime: 01-Feb-2002 12:18:00
              SampleRate: NaN
                TimeStep: NaN
                  Events: []

   Custom Properties (access using t.Properties.CustomProperties.<name>):
          OutputFileName: 'outageResults'
          OutputFileType: '.mat'
                  ToPlot: [1 1 0 0]

删除属性

您可以使用 rmprop 函数删除表的任何或所有自定义属性。但是,不能使用它删除 T.Properties 中的预定义属性,因为这些属性是 table 数据类型定义的一部分。

删除 OutputFileNameOutputFileType 自定义属性。显示其余的表属性。

T = rmprop(T,{'OutputFileName','OutputFileType'});
T.Properties
ans = 
  TimetableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'OutageTime'  'Variables'}
           VariableNames: {'RestorationTime'  'Loss'  'Cause'  'Region'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowTimes: [1468x1 datetime]
               StartTime: 01-Feb-2002 12:18:00
              SampleRate: NaN
                TimeStep: NaN
                  Events: []

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

另请参阅

| | | | | | | |

相关主题