Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

rows2vars

调整表或时间表的方向以使行成为变量

说明

示例

T2 = rows2vars(T1)T1 的行调整方向,使它们成为输出表 T2 中的变量,如下图所示。如果 rows2vars 可以串联 T1 的行的内容,则 T2 的对应变量是数组。否则,T2 的变量是元胞数组。rows2vars 始终返回表,但 T1 可以是表或时间表。

rows2vars 函数将 T1 的变量的名称复制到 T2 的一个新变量。如果 T1 具有行名称或行时间,则这些名称或时间将成为 T2 的变量名称。否则,rows2vars 会生成名称 Var1,…,VarN 作为 T2 的变量名称。

示例

T2 = rows2vars(T1,Name,Value) 使用一个或多个名称-值对组参数指定其他参数。例如,您可以使用 'VariableNamesSource' 名称-值对组参数来指定 T2 的变量名称的来源。

示例

全部折叠

创建表,然后调整其行的方向,使这些行成为新表中的变量。

patients.mat 文件加载数据数组。创建一个表,其中包含 LastNameGenderAgeHeightWeight 变量。

load patients
T1 = table(LastName,Gender,Age,Height,Weight);
head(T1,3)
ans=3×5 table
      LastName        Gender      Age    Height    Weight
    ____________    __________    ___    ______    ______

    {'Smith'   }    {'Male'  }    38       71       176  
    {'Johnson' }    {'Male'  }    43       69       163  
    {'Williams'}    {'Female'}    38       64       131  

对 T1 的行调整方向,使这些行成为输出表的变量。

T2 = rows2vars(T1);

显示 T2 的前四个变量。T2 的第一个变量包含 T1 的变量的名称。T2 的其余变量对应于 T1 的行。由于 T1 没有任何行标签,因此 T2 的变量具有默认名称,即以 Var1VarN 代表 N 个变量。

T2(:,1:4)
ans=5×4 table
    OriginalVariableNames      Var1          Var2            Var3    
    _____________________    _________    ___________    ____________

        {'LastName'}         {'Smith'}    {'Johnson'}    {'Williams'}
        {'Gender'  }         {'Male' }    {'Male'   }    {'Female'  }
        {'Age'     }         {[   38]}    {[     43]}    {[      38]}
        {'Height'  }         {[   71]}    {[     69]}    {[      64]}
        {'Weight'  }         {[  176]}    {[    163]}    {[     131]}

创建一个包含行名称的表。如果一个表具有行名称,则 rows2vars 将行名称转换为变量的名称。

T3 = table(Gender,Age,Height,Weight,'RowNames',LastName);
head(T3,3)
ans=3×4 table
                  Gender      Age    Height    Weight
                __________    ___    ______    ______

    Smith       {'Male'  }    38       71       176  
    Johnson     {'Male'  }    43       69       163  
    Williams    {'Female'}    38       64       131  

T3 的行调整方向。

T4 = rows2vars(T3);
T4(:,1:4)
ans=4×4 table
    OriginalVariableNames     Smith      Johnson      Williams 
    _____________________    ________    ________    __________

         {'Gender'}          {'Male'}    {'Male'}    {'Female'}
         {'Age'   }          {[  38]}    {[  43]}    {[    38]}
         {'Height'}          {[  71]}    {[  69]}    {[    64]}
         {'Weight'}          {[ 176]}    {[ 163]}    {[   131]}

加载一个时间表并显示它。

load bostonTT
Boston
Boston=6×3 timetable
           Time            Temp    WindSpeed    Rain
    ___________________    ____    _________    ____

    2016-06-09 06:03:00    59.5       0.1       0.05
    2016-06-09 12:00:23      63       2.3       0.08
    2016-06-09 18:02:57    61.7       3.1       0.13
    2016-06-10 06:01:47    55.4       5.7       0.15
    2016-06-10 12:06:00    62.3       2.6       0.87
    2016-06-10 18:02:57    58.8       6.2       0.33

调整它的方向,使其行成为输出中的变量。rows2vars 函数将行时间转换为名称,但会对其进行一定的修改,使其成为有效的变量名称。此外,由 rows2vars 返回的输出参数始终是表,即使输入参数是时间表也是如此。

T = rows2vars(Boston)
Warning: Table variable names that were not valid MATLAB identifiers have been modified. Since table variable names must be unique, any table variable names that happened to match the new identifiers also have been modified.
To use the original row names as new variable names, set 'PreserveVariableNames' to true.
T=3×7 table
    OriginalVariableNames    x2016_06_0906_03_00    x2016_06_0912_00_23    x2016_06_0918_02_57    x2016_06_1006_01_47    x2016_06_1012_06_00    x2016_06_1018_02_57
    _____________________    ___________________    ___________________    ___________________    ___________________    ___________________    ___________________

        {'Temp'     }               59.5                     63                   61.7                   55.4                   62.3                   58.8        
        {'WindSpeed'}                0.1                    2.3                    3.1                    5.7                    2.6                    6.2        
        {'Rain'     }               0.05                   0.08                   0.13                   0.15                   0.87                   0.33        

从 R2020a 开始,您可以从输入表或时间表中获取名称,并在输出表中将其用作变量名称,无需修改。要保留原始名称,请使用 'VariableNamingRule' 名称-值对组参数。

加载一个时间表并显示它。

load bostonTT
Boston
Boston=6×3 timetable
           Time            Temp    WindSpeed    Rain
    ___________________    ____    _________    ____

    2016-06-09 06:03:00    59.5       0.1       0.05
    2016-06-09 12:00:23      63       2.3       0.08
    2016-06-09 18:02:57    61.7       3.1       0.13
    2016-06-10 06:01:47    55.4       5.7       0.15
    2016-06-10 12:06:00    62.3       2.6       0.87
    2016-06-10 18:02:57    58.8       6.2       0.33

调整时间表的方向,使其行时间成为输出表中的变量名称。将 datetime 值转换为字符串,并使用 'VariableNamingRule' 名称-值对组保留结果名称。

T = rows2vars(Boston,'VariableNamingRule','preserve')
T=3×7 table
    OriginalVariableNames    2016-06-09 06:03:00    2016-06-09 12:00:23    2016-06-09 18:02:57    2016-06-10 06:01:47    2016-06-10 12:06:00    2016-06-10 18:02:57
    _____________________    ___________________    ___________________    ___________________    ___________________    ___________________    ___________________

        {'Temp'     }               59.5                     63                   61.7                   55.4                   62.3                   58.8        
        {'WindSpeed'}                0.1                    2.3                    3.1                    5.7                    2.6                    6.2        
        {'Rain'     }               0.05                   0.08                   0.13                   0.15                   0.87                   0.33        

T 中的变量名称不是有效的 MATLAB 标识符,因为日期以数字开头。但是,您可以通过圆点表示法使用括号来引用这些变量。

T.('2016-06-09 06:03:00')
ans = 3×1

   59.5000
    0.1000
    0.0500

将数据从电子表格读取到表中。显示前三行。

T1 = readtable('patients.xls');
head(T1,3)
ans=3×10 table
      LastName        Gender      Age              Location               Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
    ____________    __________    ___    _____________________________    ______    ______    ______    ________    _________    ________________________

    {'Smith'   }    {'Male'  }    38     {'County General Hospital'  }      71       176      true        124          93             {'Excellent'}      
    {'Johnson' }    {'Male'  }    43     {'VA Hospital'              }      69       163      false       109          77             {'Fair'     }      
    {'Williams'}    {'Female'}    38     {'St. Mary's Medical Center'}      64       131      false       125          83             {'Good'     }      

T1 的行调整方向,使其成为新表 T2 的变量。将 T1 中的 LastName 变量指定为 T2 中变量名称的来源。

T2 = rows2vars(T1,'VariableNamesSource','LastName');

显示 T2 的前四个变量。T2 的第一个变量包含 T1 的变量的名称。T2 的其余变量对应于 T1 的行。

T2(:,1:4)
ans=9×4 table
       OriginalVariableNames                   Smith                   Johnson                  Williams           
    ____________________________    ___________________________    _______________    _____________________________

    {'Gender'                  }    {'Male'                   }    {'Male'       }    {'Female'                   }
    {'Age'                     }    {[                     38]}    {[         43]}    {[                       38]}
    {'Location'                }    {'County General Hospital'}    {'VA Hospital'}    {'St. Mary's Medical Center'}
    {'Height'                  }    {[                     71]}    {[         69]}    {[                       64]}
    {'Weight'                  }    {[                    176]}    {[        163]}    {[                      131]}
    {'Smoker'                  }    {[                      1]}    {[          0]}    {[                        0]}
    {'Systolic'                }    {[                    124]}    {[        109]}    {[                      125]}
    {'Diastolic'               }    {[                     93]}    {[         77]}    {[                       83]}
    {'SelfAssessedHealthStatus'}    {'Excellent'              }    {'Fair'       }    {'Good'                     }

显示 T2.Smith 中的数据。在本示例中,T2 的每个变量都是一个 9×1 元胞数组,因为 T1 的行中的值不能串联成数组。

T2.Smith
ans=9×1 cell array
    {'Male'                   }
    {[                     38]}
    {'County General Hospital'}
    {[                     71]}
    {[                    176]}
    {[                      1]}
    {[                    124]}
    {[                     93]}
    {'Excellent'              }

将数据从电子表格读取到表中。使用电子表格的第一列作为表的行名称。显示前三行。

T1 = readtable('patients.xls','ReadRowNames',true);
head(T1,3)
ans=3×9 table
                  Gender      Age              Location               Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
                __________    ___    _____________________________    ______    ______    ______    ________    _________    ________________________

    Smith       {'Male'  }    38     {'County General Hospital'  }      71       176      true        124          93             {'Excellent'}      
    Johnson     {'Male'  }    43     {'VA Hospital'              }      69       163      false       109          77             {'Fair'     }      
    Williams    {'Female'}    38     {'St. Mary's Medical Center'}      64       131      false       125          83             {'Good'     }      

T1 中的指定变量调整方向,然后丢弃其余变量。要按名称指定数据变量,请使用字符向量元胞数组。

T2 = rows2vars(T1,'DataVariables',{'Gender','Age','Height','Weight'});
T2(:,1:4)
ans=4×4 table
    OriginalVariableNames     Smith      Johnson      Williams 
    _____________________    ________    ________    __________

         {'Gender'}          {'Male'}    {'Male'}    {'Female'}
         {'Age'   }          {[  38]}    {[  43]}    {[    38]}
         {'Height'}          {[  71]}    {[  69]}    {[    64]}
         {'Weight'}          {[ 176]}    {[ 163]}    {[   131]}

您还可以通过在输入表中的位置指定数据变量。要指定变量的位置,请使用数值数组。

T3 = rows2vars(T1,'DataVariables',[1 2 6:9]);
T3(:,1:4)
ans=6×4 table
       OriginalVariableNames            Smith        Johnson      Williams 
    ____________________________    _____________    ________    __________

    {'Gender'                  }    {'Male'     }    {'Male'}    {'Female'}
    {'Age'                     }    {[       38]}    {[  43]}    {[    38]}
    {'Smoker'                  }    {[        1]}    {[   0]}    {[     0]}
    {'Systolic'                }    {[      124]}    {[ 109]}    {[   125]}
    {'Diastolic'               }    {[       93]}    {[  77]}    {[    83]}
    {'SelfAssessedHealthStatus'}    {'Excellent'}    {'Fair'}    {'Good'  }

输入参数

全部折叠

输入表,指定为表或时间表。

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: 'VariableNamingRule','preserve' 保留取自 T1 的原始名称,而不将其修改为有效的 MATLAB® 标识符。

T1 中包含变量名称的变量,指定为由 'VariableNamesSource' 和字符向量、字符串标量、正整数或逻辑向量组成的以逗号分隔的对组。rows2vars 函数解释 'VariableNamesSource' 的值,如下表所示。

'VariableNamesSource' 的值

含义

字符向量或字符串标量

输入表 T1 中变量的名称。

整数 n

T1 中的第 n 个变量。

逻辑向量,其长度等于 T1 中的变量数

n 个元素是 1 (true),对应于 T1 的第 n 个变量。所有其他元素是 0 (false)。

虽然 'VariableNamesSource' 的值必须是用于指定表变量的名称、数值或逻辑数组,但变量本身可以为任何数据类型,不过具有下列限制。

  • 包含在指定表变量中的值必须具有允许将值转换为字符串的数据类型。例如,'VariableNamesSource' 的值可以是包含 datetime 数组的表变量的名称,因为 datetime 值可以转换为字符串。

  • 从指定的表变量获取的名称的数量必须与输入表的行数相匹配。

T1 中选择的变量,指定为以逗号分隔的对组,其中包含 'DataVariables' 和一个字符向量、字符向量元胞数组、字符串数组、正整数、正整数向量、逻辑向量或下标对象。rows2vars 函数选择由 'DataVariables' 的值指定的变量,并仅对这些变量调整方向以使其成为 T2 的行。T1 的其余变量被丢弃。

T2 中变量的命名规则,指定为逗号分隔的对组,其中包含 'VariableNamingRule' 和值 'modify''preserve'

'VariableNamingRule' 的值指定以下在输出表或时间表中命名变量的规则。

'VariableNamingRule' 的值

规则

'modify'(默认值)

修改取自输入表或时间表的名称,使输出中对应的变量名称也是有效的 MATLAB 标识符。

'preserve'

保留取自输入表或时间表的原始名称。输出中对应的变量名称可以包含任何 Unicode® 字符,包括空格和非 ASCII 字符。

注意:在某些情况下,rows2vars 必须修改原始名称,即使规则为 'preserve' 也是如此。这类情况包括:

  • 重复名称

  • 与表维度名称冲突的名称

  • 与保留名称冲突的名称。

  • 长度超过 namelengthmax 值的名称。

在 R2018a 中推出