Main Content

rows2vars

table または timetable の再配向による行の変数への変更

説明

T2 = rows2vars(T1) は、T1 の行を再配向し、出力 table T2 の変数となるようにします。rows2varsT1 の行の内容を連結できる場合、T2 の対応する変数は配列です。それ以外の場合、T2 の変数は cell 配列です。関数 rows2varsT1 の変数の名前を T2 の新しい変数にコピーします。出力は常に table ですが、T1 は table または timetable のいずれかです。

たとえば、T1 に 2 つの行と 5 つの変数がある場合、T2 には T1 の元のデータを格納する 5 つの行と 2 つの変数に加え、OriginalVariableNames という名前の新しい変数が含まれます。T2 の変数 OriginalVariableNames には、T1 の table 変数の名前が格納されます。

T1 に行の名前または行時間が含まれる場合、その名前または時間が T2 の変数名となります。それ以外の場合、rows2vars は名前 Var1,…,VarNT2 の変数名として生成します。

概念上、T2T1 の転置なようなものと考えることができます。厳密に言うと、T2 には rows2vars によって新しい変数が追加されるため、T2 は入力 table の真の転置ではありません。また、T1 の "転置" された行が T2 で cell 配列になる場合、T1 の変数に互換性がないデータ型が含まれることがあります。

T2 = rows2vars(T1,Name,Value) は、名前と値のペアの引数を 1 つ以上使用して追加の引数を指定します。たとえば、名前と値のペアの引数 'VariableNamesSource' を使用して、T2 の変数名のソースを指定できます。

すべて折りたたむ

table を作成し、その行が新しい table の変数となるように再配向します。

patients.mat ファイルからデータの配列を読み込みます。LastNameGenderAgeHeightWeight の各変数を含む table を作成します。

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

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

T1 の行が出力 table の変数となるように再配向します。

T2 = rows2vars(T1);

T2 の最初の 4 つの変数を表示します。T2 の最初の変数には T1 の変数の名前が含まれます。T2 の残りの変数は T1 の行に対応します。T1 には行ラベルがなかったため、T2 の変数には既定の名前として Var1 から VarN (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]}

行名を含む table を作成します。table に行名がある場合、rows2vars は行名を変数名に変換します。

T3 = table(Gender,Age,Height,Weight,'RowNames',LastName);
head(T3,3)
                  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]}

timetable を読み込んで表示します。

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 によって返される出力引数は常に table となります。これは入力引数が timetable の場合でも同様です。

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 'VariableNamingRule' to 'preserve'.
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 以降、入力 table または timetable から名前を取得し、それらを変更せずに出力 table 内の変数名として使用できます。元の名前を保持するには、名前と値のペアの引数 'VariableNamingRule' を使用します。

timetable を読み込んで表示します。

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

timetable を再配向して、その行時間が出力 table 内の変数名となるようにします。datetime 値を string に変換し、名前と値のペア '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

データをスプレッドシートから table に読み取ります。最初の 3 行を表示します。

T1 = readtable('patients.xls');
head(T1,3)
      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 の行を再配向し、新しい table T2 の変数にします。T1 の変数 LastNameT2 の変数の名前のソースになるように指定します。

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

T2 の最初の 4 つの変数を表示します。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 列の cell 配列です。これは T1 の行の値を連結して配列にすることができないためです。

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

データをスプレッドシートから table に読み取ります。スプレッドシートの最初の列を table の行名として使用します。最初の 3 行を表示します。

T1 = readtable('patients.xls','ReadRowNames',true);
head(T1,3)
                  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 で指定した変数を再配向して、残りを破棄します。データ変数を名前で指定するには、文字ベクトルの cell 配列を使用します。

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]}

また、入力 table 内の位置でデータ変数を指定することもできます。変数の位置を指定するには、数値配列を使用します。

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'  }

入力引数

すべて折りたたむ

入力 table。table または timetable として指定します。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: 'VariableNamingRule','preserve' は、T1 から取得した元の名前を有効な MATLAB® 識別子となるように変更せずに保持します。

変数名を含む T1 内の変数。'VariableNamesSource' と文字ベクトル、string スカラー、正の整数または logical ベクトルで構成されるコンマ区切りのペアとして指定します。関数 rows2vars は、表に示すように 'VariableNamesSource' の値を解釈します。

'VariableNamesSource' の値

意味

文字ベクトルまたは string スカラー

入力 table T1 内の変数の名前。

整数 n

T1 内の n 番目の変数。

長さが T1 内の変数の数と一致する logical ベクトル

n 番目の要素は 1 (true) であり、T1n 番目の変数に対応します。他のすべての要素は 0 (false) です。

'VariableNamesSource' の値は table 変数を指定する名前、数値、または logical 配列でなければなりませんが、変数自体はどのデータ型でもかまいません。ただし、次の制限があります。

  • 指定した table 変数に含まれる値は、値を string に変換できるデータ型でなければなりません。たとえば、datetime 値は string に変換できるため、'VariableNamesSource' の値は datetime 配列を含む table 変数の名前にすることができます。

  • 指定した table 変数から取得する名前の数は、入力 table の行数と一致しなければなりません。

選択された T1 の変数。'DataVariables' と、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern スカラー、正の整数、正の整数のベクトル、logical ベクトル、または添字オブジェクトで構成されるコンマ区切りのペアとして指定します。rows2vars は、'DataVariables' の値で指定した変数を選択し、その変数だけが T2 の行となるように再配向します。T1 の残りの変数は破棄されます。

T2 内の変数の命名規則。'VariableNamingRule' と、値 'modify' または値 'preserve' で構成されるコンマ区切りのペアとして指定します。

'VariableNamingRule' の値は、出力 table または timetable 内の変数について、次の命名規則を指定します。

'VariableNamingRule' の値

規則

'modify' (既定)

出力内の対応する変数名が有効な MATLAB 識別子となるように、入力 table または timetable から取得された名前を変更します。

'preserve'

入力 table または timetable から取得された元の名前を保持します。出力内の対応する変数名には、空白や非 ASCII 文字を含む任意の Unicode® 文字を使用できます。

メモ: 場合によっては、'preserve' が規則であっても、rows2vars は元の名前を変更しなければなりません。次のような場合が含まれます。

  • 重複した名前

  • table の次元名と競合する名前

  • 予約名と競合する名前

  • namelengthmax の値を超える長さの名前

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2018a で導入